gpt4 book ai didi

c++ - OpenGL 中的可视化问题(glOrtho 和投影)

转载 作者:行者123 更新时间:2023-11-30 16:54:37 27 4
gpt4 key购买 nike

我不知道我的函数是否做错了什么(可能是 glOrtho 的参数错误),所以结果就是错误的,或者是否一切正常。

特别是我有这种情况:

link to image

我希望绿色矩形及其所有内部内容占据窗口的所有空间,而不仅仅是窗口的一部分(如果您注意到主要内容周围有一些空白空间:“绿色矩形”)。

这是我的主要功能:

#define HEXAGONAL_SHRINK 0.8655f

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(640, 480);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}

void reshape(int w, int h)
{
GLfloat aspect, dim;

glViewport (0, 0, (GLsizei) w, (GLsizei) h);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (s3hex->rows > s3hex->columns)
dim = s3hex->rows * 0.5f;
else
dim = s3hex->columns * 0.5f;
aspect = (GLfloat)w / (GLfloat)h;
if (w <= h)
glOrtho (-dim, dim, -dim/aspect, dim/aspect, 1.0, -1.0);
else
glOrtho (-dim*aspect, dim*aspect, -dim, dim, 1.0, -1.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void display(void)
{
CALint i, j;
CALreal z, h, color;

glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();

glTranslatef(-(s3hex->columns*HEXAGONAL_SHRINK)/2.0f, s3hex->rows/2.0f, 0);
glScalef(HEXAGONAL_SHRINK, -1, 1);

for (i=0; i<s3hex->rows; i++)
for (j=0; j<s3hex->columns; j++)
{
z = calGet2Dr(s3hex,Q.z,i,j);
h = calGet2Dr(s3hex,Q.h,i,j);

if (h > 0)
{
color = (h - h_min) / (h_Max - h_min);
glColor3d(1,color,0);
glRecti(j, i, j+1, i+1);
}
else
if (z > 0)
{
color = (z - z_min) / (z_Max - z_min);
glColor3d(color,color,color);
glRecti(j, i, j+1, i+1);
}
}

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glColor3d(0,1,0);
glRectd(0,0,s3hex->columns, s3hex->rows);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

glPopMatrix();

glutSwapBuffers();
}

P.S:如果您需要知道 s3hex 是什么,那么您可以将其视为一个普通矩阵,其中每个单元格都包含一组子状态。然后根据这些子状态的值,我在显示函数中设置渲染的颜色。

最佳答案

在我看来一切都很正常。无法保证 s3hex->columnss3hex->rows 与您的视口(viewport)大小相匹配。

您可以做的是放大模型 View 以使绘图填充您的视口(viewport)。

大致如下:

glScalef(viewportWidth / s3hex->columns, viewportHeight / s3hex->rows, 1);

如果 s3hex->columnss3hex->rows 为零,请勿执行此操作。

关于c++ - OpenGL 中的可视化问题(glOrtho 和投影),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40502934/

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