我可以在堆栈溢出的@Rabbid76的帮助下画出圆圈,并对其进行平移和旋转。
但我需要帮助来回答这两个问题:
Q1 -在xy平面上对此圆进行正交投影。
Q2-考虑三个轴(100,0,0),(0,100,0),(0,0,100),向上向量为Z轴(原圆)和相机在原点的位置。视点位于旋转平移的圆的中心。在由这些轴构成的平面上对平移的圆点进行感知投影。如果相机沿Z轴旋转,也可以编写代码来获得感知投影。
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from math import *
def circle():
posx, posy = 40,40
sides = 80
radius = 20
glBegin(GL_POLYGON)
for i in range(100):
cosine= radius * cos(i*2*pi/sides) + posx
sine = radius * sin(i*2*pi/sides) + posy
glVertex2f(cosine,sine)
glEnd()
def iterate():
glViewport(0, 0, 3000, 3000)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, 500, 0.0, 500, -100, 100)
glMatrixMode (GL_MODELVIEW)
glLoadIdentity()
glTranslatef(0, 0, 20)
glRotatef(30, 1, 0, 0)
def showScreen():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
iterate()
glColor3f(1.0, 0.0, 3.0)
circle()
glutSwapBuffers()
glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(400, 400)
glutInitWindowPosition(200, 200)
wind = glutCreateWindow("OpenGL Coding Practice")
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
glutMainLoop()
转载请注明出处:http://www.jxbyjx.net/article/20230524/1574722.html