gpt4 book ai didi

python - 如何绘制单个 3D 点?

转载 作者:行者123 更新时间:2023-11-28 21:32:09 25 4
gpt4 key购买 nike

我正在使用 Python 3 和 PyOpenGL,我需要在空间中绘制单个点。我知道一个点没有体积,但我不知道是否有一种简单的方法可以在特定坐标处绘制点/球体。编辑:我在 pygame 和 tkinter gui 中使用 opengl

我试过下面的代码:

glEnable(GL_POINT_SMOOTH)
glBegin(GL_POINTS)
glColor3d(1, 1, 1)
glPointSize(200)
glVertex3d(1, 1, 1)
glEnd() # This throws an error

错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
File "C:/Users/reas/Desktop/Programación/Dibujo/Dibujo.py", line 65, in vista_alzado
glEnd()
File "C:\Program Files (x86)\Python37-32\lib\site-packages\OpenGL\latebind.py", line 61, in __call__
return self.wrapperFunction( self.baseFunction, *args, **named )
File "C:\Program Files (x86)\Python37-32\lib\site-packages\OpenGL\GL\exceptional.py", line 45, in glEnd
return baseFunction( )
File "C:\Program Files (x86)\Python37-32\lib\site-packages\OpenGL\platform\baseplatform.py", line 409, in __call__
return self( *args, **named )
File "C:\Program Files (x86)\Python37-32\lib\site-packages\OpenGL\error.py", line 232, in glCheckError
baseOperation = baseOperation,
OpenGL.error.GLError: GLError(
err = 1282,
description = b'operaci\xf3n no v\xe1lida',
baseOperation = glEnd,
cArguments = ()
)

最佳答案

错误是因为glPointSize()引起的在 glBegin/glEnd 序列中调用。这是不允许的。
您必须在 glBegin 之前调用 glPointSize,例如:

glEnable(GL_POINT_SMOOTH)
glPointSize(5)

glBegin(GL_POINTS)
glColor3d(1, 1, 1)
glVertex3d(0, 0, 0)
glEnd()

一旦glBegin开始绘制图元只允许指定顶点坐标(glVertex)和更改属性(例如glColorglTexCoord ...),直到绘制结束(glEnd)。
所有其他指令将被忽略并导致 GL_INVALID_OPERATION 错误(错误代码 1282)。


请注意,如果模型 View 矩阵和投影矩阵是单位矩阵,则坐标 (1, 1, 1) 是视口(viewport)的右上(远)点。
坐标 (0, 0, 0) 将位于 View (体积)的中心。

如果使用透视投影,

gluPerspective(40, display[0]/display[1], 0.1, 50)

那么该点的 z 坐标必须小于 -near(示例中近平面为 0.1)且大于 -far(远平面为 50 ) 否则该点被视锥体的近平面或远平面裁剪。请注意 View 空间的 z 轴指向视口(viewport)之外。例如

glVertex3d(0, 0, -1)

另见 Immediate mode and legacy OpenGL

关于python - 如何绘制单个 3D 点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56957118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com