使用 OpenGL 的 C++ - 绘制正方形
Posted
技术标签:
【中文标题】使用 OpenGL 的 C++ - 绘制正方形【英文标题】:C++ with OpenGL - Drawing a square 【发布时间】:2013-04-25 11:00:00 【问题描述】:我必须编写一个程序来绘制一个可以改变颜色的正方形。 该程序将绘制一个白色背景的窗口,尺寸为 256x256 像素,一个红色正方形,左上顶点坐标 (x, y) = (30, 226) 右下角坐标 (x, y) = (226 , 30 )。当按下“a”键(keycode = 97)时,方块应保持蓝色。当按下“v”键(keycode = 118)时,方块应该变回红色。当按下 ESC 键(keycode = 27)时,程序应该被终止。
-- 有日志...
Build Log
Build started:
Project: square, Configuration: Debug|Win32
Command Lines
Creating temporary file "c:\Users\TEMP\Documents\Visual Studio 2008\Projects\square\square\Debug\RSP00000544445896.rsp" with contents
[
/OUT:"C:\Users\TEMP\Documents\Visual Studio 2008\Projects\square\Debug\square.exe" /MANIFEST /MANIFESTFILE:"Debug\square.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\TEMP\Documents\Visual Studio 2008\Projects\square\Debug\square.pdb" /DYNAMICBASE /NXCOMPAT /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
".\Debug\square.obj"
]
Creating command line "link.exe @"c:\Users\TEMP\Documents\Visual Studio 2008\Projects\square\square\Debug\RSP00000544445896.rsp" /NOLOGO /ERRORREPORT:PROMPT"
Output Window
Linking...
square.obj : error LNK2019: unresolved external symbol __imp____glutInitWithExit@12 referenced in function _glutInit_ATEXIT_HACK@8
square.obj : error LNK2019: unresolved external symbol __imp____glutCreateWindowWithExit@8 referenced in function _glutCreateWindow_ATEXIT_HACK@4
C:\Users\TEMP\Documents\Visual Studio 2008\Projects\square\Debug\square.exe : fatal error LNK1120: 2 unresolved externals
Results
Build log was saved at "file://c:\Users\TEMP\Documents\Visual Studio 2008\Projects\square\square\Debug\BuildLog.htm"
square - 3 error(s), 0 warning(s)
代码:
#include <GL/glut.h>
// Function callback that is called to manage the keyboard tasks
float r = 0.0f;
float g = 0.0f;
float b = 0.0f;
void GerenciaTeclado(unsigned char key, int x, int y)
switch (key)
case 'a':// change the actual color to red
r = 1.0f;
g = 0.0f;
b = 0.0f;
break;
case 'v':// change de color to blue
r = 0.0f;
g = 0.0f;
b = 1.0f;
break;
case 27:// close the screen
exit(0);
break;
glutPostRedisplay();
// Function callback that is called to draw
void Desenha(void)
// Clean the window
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// Initializes the coordinates system
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double w = glutGet( GLUT_WINDOW_WIDTH );
double h = glutGet( GLUT_WINDOW_HEIGHT );
double ar = w / h;
glOrtho( -2 * ar, 2 * ar, -2, 2, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// Draw a square
glBegin(GL_QUADS);
// Shows that the color is red
// R G B
glColor3f(r, g, b);
glVertex2f(-1, -1);
glVertex2f( 1, -1);
// Shows that the color is blue
glColor3f(0.0f, 0.0f, 1.0f);
glVertex2f( 1, 1);
glVertex2f(-1, 1);
glEnd();
glutSwapBuffers();
// Main Program
int main( int argc, char** argv )
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(256,256);
glutInitWindowPosition(10,10);
glutCreateWindow("Quadrado");
glutDisplayFunc(Desenha);
glutKeyboardFunc(GerenciaTeclado);
glutMainLoop();
【问题讨论】:
当你有错误时总是发布你的错误。应该没有人能够突然猜到它。 我现在已经添加了错误的图像...非常感谢。 复制并粘贴到问题中会更好。无论如何,既然你发布了它,我看到你有一个 linker 错误,所以你的代码确实编译了。它没有链接。 没关系...我已经发布了创建的日志。非常感谢。但是您提到的链接器错误...这是什么意思?所以问题不在于我的代码? 我相信您与glut.h
的链接有问题。检查库的文档,了解如何将其与程序链接。
【参考方案1】:
使用 GLUT 构建内容时,您需要将代码与 glut 库链接。尝试谷歌如何将视觉工作室与其他第三方库链接。在您的情况下,我相信您需要添加另一个库目录,而不是在项目链接器属性中添加一个额外的依赖项(glut.lib)。
【讨论】:
以上是关于使用 OpenGL 的 C++ - 绘制正方形的主要内容,如果未能解决你的问题,请参考以下文章