gpt4 book ai didi

c++ - 使用 OpenGL 绘制时钟的小时标记

转载 作者:行者123 更新时间:2023-11-28 00:40:31 24 4
gpt4 key购买 nike

这是我的代码:

void drawClock(void) 
{

glClearColor(1.0,1.0,1.0,1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor3f(0.0,0.0,0.0);


for(int i=0; i<12; i++){

glRotatef(30,0,0,1);
glTranslatef(5.2,0.0,0.0);
glutWireCube(2.0);

}

glFlush();
}

这是我的 reshape 函数(没有它我什么也看不到,虽然我不确定它是如何工作的)

void changeSize(int w, int h) {
// Prevent a divide by zero, when window is too short
// (you cant make a window of zero width).
if(h == 0) h = 1;
float ratio = 1.0* w / h;
// Reset the coordinate system before modifying
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Set the viewport to be the entire window
glViewport(0, 0, w, h);
// Set the correct perspective.
gluPerspective(45,ratio,1,1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,70.0,
0.0,0.0,-1.0,
0.0f,1.0f,0.0f);
}

因此,我尝试使用大小为 2.0 的线立方体绘制时钟的小时标记,并且这些立方体中的每一个都必须距离中心 5.2 个单位。这是一项作业,我知道它可能非常简单,但我无法使其正常工作。我的问题是立方体以 3D 形式出现,但我希望它们以 2D 形式出现,因为我只会看到一张脸。另外,圆圈没有居中,我不明白为什么。我知道我应该使用 pushMatrix 和 popMatrix,但无论我如何使用它都不起作用。

最佳答案

3d 问题

gluPerspective 生成 perspective projection .要完成您需要的工作,您应该申请 orthographic projection相反。

使用您当前的代码执行此操作的最佳方法是我们 glOrtho提供左、右、下、上、远、近方框,其中所有内容都将“显示”为 2D。尝试用下面的代码代替 gluPerspective

glOrtho(10.0f,-10.0f,10.0f,-10.0f,10.0f,-10.0f,10.0f);

位置问题

我不太确定转换,因为我已经有一段时间没有使用即时模式了。请注意,操作顺序会有所不同。

至于矩阵的push/pop,基本就是一个stack详细说明转换的 4x4 矩阵。我确定它按照

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslate(x,y,z);// Where x,y,z is the starting point of your clock
for(int i=0; i<12; i++){
glPushMatrix();
glRotatef(i * 30,0,0,1);
glTranslatef(5.2,0.0,0.0);
glutWireCube(2.0);
glPopMatrix();
}

关于c++ - 使用 OpenGL 绘制时钟的小时标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19130000/

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