我尝试在没有OpenGL函数的情况下平移三角形,例如glTranslate*()或glScale*()。
我的渲染代码是:
def render(T):
glClear(GL_COLOR_BUFFER_BIT)
glLoadIdentity()
# draw coordinate
glBegin(GL_LINES)
glColor3ub(255, 0, 0)
glVertex2fv(np.array([0., 0.]))
glVertex2fv(np.array([1., 0.]))
glColor3ub(0, 255, 0)
glVertex2fv(np.array([0., 0.]))
glVertex2fv(np.array([0., 1.]))
glEnd()
#draw triangle
glBegin(GL_TRIANGLES)
glColor3ub(255,255,255)
#this is the part that I'm trying to modify.
glVertex2fv((**T**@ np.array([.0, .5, 1.]))[:-1])
glVertex2fv((**T**@ np.array([.0, .0, 1.]))[:-1])
glVertex2fv((**T**@ np.array([.5, .0, 1.]))[:-1])
glEnd()
我知道如何翻译,旋转,和缩放矩阵的工作;例如:
T = np.identity(4)
T[:3 ,3] = [-.4, 0., .0]
# this shifts object by -.4 about x-axis.
但是,我不知道如何实现为代码。我有一个三角形与这些坐标,
glVertex2fv((**T**@ np.array([.0, .5, 1.]))[:-1])
glVertex2fv((**T**@ np.array([.0, .0, 1.]))[:-1])
glVertex2fv((**T**@ np.array([.5, .0, 1.]))[:-1])
T是我需要修改的部分。我只需要把T值赋为矩阵(就像我上面作为例子使用的那样),还是有什么我需要遵循的特定格式?
此外,我希望在按下某个键时进行转换,例如:
global T
def key_callback(window, key, scancode, action, mods):
global T
if key==glfw.KEY_1:
if action==glfw.PRESS:
T =
我应该在这里指定T
值吗?
1条答案
按热度按时间dluptydi1#
你需要一个有4个分量的向量,通过一个4x4的矩阵来转换它。顶点坐标是Homogeneous coordinates:
最小示例: