- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
任何人都可以解释发生了什么或没有发生什么,以便我可以更正它。到目前为止,这是来自 .cpp 文件的代码。在 Visual Studio Community 2015 中运行。
#include <windows.h>
#include <gl/GL.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <math.h>
#define M_PI 3.14159265358979323846
const int screenWidth = 640;
const int screenHeight = 480;
这里使用aa
, bb
, cc
, & dd
将世界坐标映射到屏幕坐标.我把它们打印出来以确保它工作正常并且坐标计算正确。在这种情况下 0 < 半径 <= 5。
void drawHex(GLdouble radius, GLdouble aa, GLdouble bb, GLdouble cc, GLdouble dd) {
glBegin(GL_POLYGON);
for (int i = 0; i < 6; i++) {
glVertex2d(((cos(i / 6.0 * 2 * M_PI) * radius) * aa) + cc,
((sin(i / 6.0 * 2 * M_PI) * radius) * bb) + dd);
}
glEnd();
glFlush();
}
这里我计算A
、B
、C
和D
来将世界映射到 View ,将它们传递给 drawHex
函数。
void myDisplay(void) {
glClear(GL_COLOR_BUFFER_BIT);
GLdouble winWidth = glutGet(GLUT_WINDOW_WIDTH);
GLdouble winHeight = glutGet(GLUT_WINDOW_HEIGHT);
GLdouble A, B, C, D;
glViewport((GLint)0, (GLint)0, (GLint)winWidth, (GLint)winHeight);
A = winWidth / 10.0;
B = winHeight / 10.0;
C = 0 - (A * -5.0);
D = 0 - (B * -5.0);
drawHex(0.5, A, B, C, D);
}
程序初始化和主循环。
void myInit() {
glClearColor(0.93, 0.93, 0.93, 0.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-5.0, 5.0, -5.0, 5.0);
glClear(GL_COLOR_BUFFER_BIT);
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(screenWidth, screenHeight);
glutInitWindowPosition(100, 150);
glutCreateWindow("Window");
myInit();
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}
我得到的只是一个带有背景色的空白窗口。我希望 View 中间有一个六边形(尚未调整大小以保持适当的纵横比)。
最佳答案
在您调用 gluOrtho2D
时您将 [-5, 5] 作为两个维度的边界传递。在您的计算中,超出此范围的任何内容都将被剪掉并且不可见。让我们看看是否是这种情况。
aa
, bb
, cc
和 dd
你通过的是常量;他们总是保持:64
, 48
, 320
和 240
.更正上述问题后得到的值将始终在 [-1, 1] 范围内,因为那是 cos
的辅域和 sin
功能。这乘以 radius * aa
并添加到 cc
.所以最坏的情况是 (1 * 0.5 * 64) + 320 = 352
, 这显然在 -5
之外您通过 gluOrtho2D
设置的边界.
同样的观察结果适用于 y
也。先在纸上做数学,然后再编写代码。确保所有边界条件都在限制范围内。
建议您通过GLUT_DOUBLE
为避免闪烁,正如另一个答案所提到的,您需要在显示功能末尾交换缓冲区才能使双缓冲工作。阅读 Difference between single buffered(GLUT_SINGLE) and double buffered drawing(GLUT_DOUBLE) 的答案了解详情。此外,您无需调用 glViewport
在每次渲染调用中,将其放入您的 init
中功能。
关于c++ - 需要帮助理解为什么在 OpenGL 中没有任何东西被绘制到屏幕上,过剩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879890/
我试图在固定的时间间隔后依次旋转一个红色三角形和一个绿色三角形。我尝试了以下代码,但时间间隔不是常数。我无法找出问题所在。 static void display(void) { now=g
我有一些基本代码可以使用 glut 收集按键事件。 如果我按住一个键,我会触发连续事件(向下/向上/向下/向上/向下/向上/......),而不是预期的向下(一次,在开始时)及以上(一次,最后) #i
当我尝试调整过剩窗口的大小时,屏幕变为空白。 这是 reshape 回调函数的代码: void Resize(int width, int height) { CurrentWidth =
我使用最新的 freeglut 成功编译了这段代码,但我不断得到一个空白窗口,其中填充了 glClearColor 函数中指定的颜色。这个简单的程序来 self 学院提供的交互式计算机图形学教科书。我
任何人都可以解释发生了什么或没有发生什么,以便我可以更正它。到目前为止,这是来自 .cpp 文件的代码。在 Visual Studio Community 2015 中运行。 #include #i
我正在学习一个 openGL 教程,其中包括这个名为“glutCreateWindow”的函数,我的编译器(XCode 5 gcc,OSX)说它已被弃用。 还有什么选项适合替换这些“过剩*”相关函数?
我使用 OpenGL 3.3。在我的应用程序中,我将鼠标光标设置在窗口的中心(我将窗口的大小传递给“Camera”类的构造函数),但是当我调整窗口大小时(如全屏)我将光标放在左边的部分。所以,我想通过
我在为我的 GLUT 小行星游戏显示和动画多个小行星时遇到问题。我可以生成 1 ok,但是当我尝试添加更多时,输出不正确,createasteroid 不断被调用,并且出于某种原因只是在屏幕的不同部分
我认为我遇到了一个棘手的问题。我是 C++ 和 OpenGL/glut 的新手,所以要温柔!我正在编写一个独立于平台的简单程序(仅 2D)并且需要一个基本的 UI,因此我有一个生成 Button 对象
我很笨 :) 那么有人可以帮忙编写分步手册,如何安装“cairo”、“glut”并在 Windows 7 上的 VS 2010 项目 (C++) 中使用它吗? PS:最有趣的事情是我在 Linux 中
在我的 GLUT/OpenGL 练习中,我必须加载 3 个不同的对象,我给它们一个 file.m。这是通过读取该文件、创建列表并最终调用 glCallList() 来完成的。选择一个对象后,我必须如何
我正在尝试制作 gluLookAt() 函数,以便当我按下向上和向下键时,相机围绕 X 轴移动 我正在尝试我在以下位置看到的方法:http://www.lighthouse3d.com/tutoria
我是一名优秀的程序员,十分优秀!