我试图在不使用gluSphere()函数的情况下渲染球体。但是这段代码没有渲染任何球体。我无法确切地知道错误所在。
import sys
import math
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import pygame
user_theta = 0
user_height = 0
def draw(radius,lats,longs) :
for i in range(0,lats):
lat0 = math.pi*(-0.5 + (i-1)/lats)
z0 = math.sin(lat0)
zr0 = math.cos(lat0)
lat1 = math.pi*(-0.5 + i/lats)
z1 = math.sin(lat1)
zr1 = math.cos(lat1)
glColor3f(0.0,0.0,1.0)
glBegin(GL_QUAD_STRIP)
for j in range(0,longs):
lng = 2*math.pi*(j-1)/longs
x= math.cos(lng)
y = math.sin(lng)
glNormal3f(x * zr0, y * zr0, z0)
glVertex3f(x * zr0, y * zr0, z0)
glNormal3f(x * zr1, y * zr1, z1)
glVertex3f(x * zr1, y * zr1, z1)
glEnd()
glFlush()
def display() :
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glColor3f(1.0, 1.0, 1.0)
glShadeModel(GL_SMOOTH)
draw(1.0, 10, 10)
glutSwapBuffers()
def computeLocation():
x = 2 * math.cos(user_theta)
y = 2 * math.sin(user_theta)
z = user_height
d = math.sqrt(x * x + y * y + z * z)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
#glFrustum(-d * 0.5, d * 0.5, -d * 0.5, d * 0.5, d - 1.1, d + 1.1)
#gluLookAt(x, y, z, 0, 0, 0, 0, 0, 1)
gluOrtho2D(0.0, 640.0, 0.0, 480.0)
def init():
glClearColor(0.0, 0.0, 0.0, 0.0)
computeLocation()
glutInit(sys.argv)
glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB)
glutInitWindowSize (500, 500)
glutInitWindowPosition (100, 100)
glutCreateWindow ('ROBOT')
init ()
glutDisplayFunc(display)
##glutReshapeFunc(reshape)
##glutKeyboardFunc(keyboard)
glutMainLoop()
答案 0 :(得分:0)
我在这里看到了几个问题。虽然我没有将python用于这种代码,但我相信当你分割两个整数时它会产生整数结果,就像大多数编程语言一样。仔细查看以下行,以及其他几个类似的行:
lat0 = math.pi*(-0.5 + (i-1)/lats)
(i-1)/lats
除法将始终产生0,导致所有多边形都退化,并且不会绘制任何内容。
另一个主要问题是你的坐标范围。您的gluOrtho2D
调用将坐标范围设置为(0..640)和(0..480)。但是你的坐标在(-1..1)范围内。所以你的整个几何结构最终只有一个像素。
删除gluOrtho2D
调用,并添加一个类型转换以执行float中的分区,为我提供了一个蓝色且大部分为圆形的形状。这是将代码转换为C ++,我的系统没有这些python模块。
代码有更多错误。例如,您的第一个循环将索引从0开始,但随后从索引中减去一个以计算第一个角度。但是我确信你可以在渲染完成后找出剩余的问题。
答案 1 :(得分:-1)
我看到了上传顶点和法线的位置,但没有看到正在进行的任何glDraw*
调用,没有这些调用就不会呈现任何内容。