• 主页
  • 考虑一个圆(??40) 2+(??40) 2= 400。沿X轴逆时针旋转30度,并沿Z轴平移+20个单位

考虑一个圆(??40) 2+(??40) 2= 400。沿X轴逆时针旋转30度,并沿Z轴平移+20个单位

我可以在堆栈溢出的@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