gpt4 book ai didi

c - Xcode 和 visual studio 中的 OpenGl 结果差异

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:22 25 4
gpt4 key购买 nike

我写了一段简单的OpenGL代码,在Visual Studio中运行正常。但是当它被移动到 Xcode 时。编译成功了,结果却不一样。什么都没有。

我只更改了 OpenGL、GLUT 头文件。

我怀疑 gluPerspective 的范围在 Xcode 中不同,但我不知道确切原因。

它是如何工作的?

这是我在 xcode 中的代码

#include <GLUT/GLUT.h>
#include <OpenGL/OpenGL.h>
#include <OpenGL/glu.h>
#include <math.h>
#include <stdio.h>

double RotAngle = 0.0;
void OctPyramid(void)
{
int N = 8;
double angle = 2 * 3.1415 / N;
int i;
glBegin(GL_LINE_LOOP);
for (i = 0; i < N; i++)
glVertex3f(cos(i * angle), -1.0, sin(i * angle));
glEnd();
glBegin(GL_LINES);
for (i = 0; i < N; i++)
{
glVertex3f(0.0, 1.0, 0.0);
glVertex3f(cos(i * angle), -1.0, sin(i * angle));
}
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glTranslatef(0.0, 0.0, -6.0);
glRotatef(RotAngle, 0, 1, 0);
glTranslatef(2.0, 0.0, 0.0);

OctPyramid();

glFlush();
}


void IncAngle(void)
{
RotAngle = RotAngle + 0.08;
if (RotAngle > 360.0)
RotAngle = RotAngle - 360.0;
glutPostRedisplay();
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);

glutInitWindowPosition(0, 0);
glutInitWindowSize(400, 400);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow("main");
glClearColor(0.0, 0.0, 0.0, 1.0);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1.0, 0.0, 10.0);


glutDisplayFunc(display);

glutIdleFunc(IncAngle);
glutMainLoop();
}

最佳答案

到近平面的距离 zNear 和到远平面的距离 zFar 必须大于 0:

设置 zNear 大于 0.0:

gluPerspective(45, 1.0, 0.0, 10.0);
gluPerspective(45, 1.0, 0.1, 10.0);

请注意,gluPerspective设置如下投影矩阵:

ta = tan(fovy / 2)
a = aspect
n = zNear
f = zFar

x: 1/(ta*a) 0 0 0
y: 0 1/ta 0 0
z: 0 0 -(f+n)/(f-n) -1
t: 0 0 -2*f*n/(f-n) 0

如果 zNear = 0 这会导致:

x:    1/(ta*a)  0     0    0
y: 0 1/ta 0 0
z: 0 0 -1 -1
t: 0 0 0 0

如果 Homogeneous coordinates由这样的矩阵转换,则结果的 z 分量将始终等于 w 分量。
Perspective divide之后无论坐标如何,归一化设备坐标的 z 分量都是 1。
这意味着几何体的所有顶点坐标都被“投影”到相同的深度,所有几何体的最大深度为 1.0。
因为 zNear 必须大于 0.0,否则行为未指定并且取决于库的内部实现。

关于c - Xcode 和 visual studio 中的 OpenGl 结果差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56598370/

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