我在使用代码块10.05时遇到了一些困难,因为它识别了我机器上的GLFW库。当我创建一个空项目,并复制粘贴此GLFW教程中的代码>> http://content.gpwiki.org/index.php/GLFW:Tutorials:Basics
#include <stdlib.h>
#include <GL/glfw.h>
void Init(void);
void Shut_Down(int return_code);
void Main_Loop(void);
void Draw_Square(float red, float green, float blue);
void Draw(void);
float rotate_y = 0,
rotate_z = 0;
const float rotations_per_tick = .2;
int main(void)
{
Init();
Main_Loop();
Shut_Down(0);
}
void Init(void)
{
const int window_width = 800,
window_height = 600;
if (glfwInit() != GL_TRUE)
Shut_Down(1);
// 800 x 600, 16 bit color, no depth, alpha or stencil buffers, windowed
if (glfwOpenWindow(window_width, window_height, 5, 6, 5,
0, 0, 0, GLFW_WINDOW) != GL_TRUE)
Shut_Down(1);
glfwSetWindowTitle("The GLFW Window");
// set the projection matrix to a normal frustum with a max depth of 50
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float aspect_ratio = ((float)window_height) / window_width;
glFrustum(.5, -.5, -.5 * aspect_ratio, .5 * aspect_ratio, 1, 50);
glMatrixMode(GL_MODELVIEW);
}
void Shut_Down(int return_code)
{
glfwTerminate();
exit(return_code);
}
void Main_Loop(void)
{
// the time of the previous frame
double old_time = glfwGetTime();
// this just loops as long as the program runs
while(1)
{
// calculate time elapsed, and the amount by which stuff rotates
double current_time = glfwGetTime(),
delta_rotate = (current_time - old_time) * rotations_per_tick * 360;
old_time = current_time;
// escape to quit, arrow keys to rotate view
if (glfwGetKey(GLFW_KEY_ESC) == GLFW_PRESS)
break;
if (glfwGetKey(GLFW_KEY_LEFT) == GLFW_PRESS)
rotate_y += delta_rotate;
if (glfwGetKey(GLFW_KEY_RIGHT) == GLFW_PRESS)
rotate_y -= delta_rotate;
// z axis always rotates
rotate_z += delta_rotate;
// clear the buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// draw the figure
Draw();
// swap back and front buffers
glfwSwapBuffers();
}
}
void Draw_Square(float red, float green, float blue)
{
// Draws a square with a gradient color at coordinates 0, 10
glBegin(GL_QUADS);
{
glColor3f(red, green, blue);
glVertex2i(1, 11);
glColor3f(red * .8, green * .8, blue * .8);
glVertex2i(-1, 11);
glColor3f(red * .5, green * .5, blue * .5);
glVertex2i(-1, 9);
glColor3f(red * .8, green * .8, blue * .8);
glVertex2i(1, 9);
}
glEnd();
}
void Draw(void)
{
// reset view matrix
glLoadIdentity();
// move view back a bit
glTranslatef(0, 0, -30);
// apply the current rotation
glRotatef(rotate_y, 0, 1, 0);
glRotatef(rotate_z, 0, 0, 1);
// by repeatedly rotating the view matrix during drawing, the
// squares end up in a circle
int i = 0, squares = 15;
float red = 0, blue = 1;
for (; i < squares; ++i){
glRotatef(360.0/squares, 0, 0, 1);
// colors change for each square
red += 1.0/12;
blue -= 1.0/12;
Draw_Square(red, .6, blue);
}
}
使用codeblocks编译它会返回错误:
/home/user/Graphics/Project_2/test.c|27|undefined reference to `glfwInit'|
/home/user/Graphics/Project_2/test.c|30|undefined reference to `glfwOpenWindow'|
......
.....
....
...
但是当我创建一个简单的* .c文件并使用:
编译它时gcc myprog.c -o myprog -lglfw -lGL -lpthread
它的工作原理..如何使代码块与GLFW一起工作? 感谢
答案 0 :(得分:2)
请按照以下步骤操作。
答案 1 :(得分:1)
确保您拥有正确类型的glfw库。即你的mingw编译器的x86或x64。 8小时的时间搜索未定义的引用错误,即链接器问题到glfw。
答案 2 :(得分:0)
答案 3 :(得分:0)
我之前在将GLFW导入代码块方面遇到了类似的问题,我最近发现了一些对我有用的东西。
我可以看到你已经正确地完成了标题安装,但是我会在这个响应中包含它,以便你可以仔细检查一切是否处于最佳状态。
我还建议您使用“文档”中的示例代码。 glfw.org的标签。它对我来说效果很好,所以我认为它也适合你。
由于您使用的是GLFW,我假设您要在应用程序中使用OpenGL,因此我将在教程中包含OpenGL的安装
一个。创建相关文件夹
您需要做的第一件事是为系统上的库文件和头文件设置一个位置。您可以在驱动器上的指定位置创建这些文件夹,也可以在code :: blocks项目中创建这些文件夹。
在我的情况下,我创建了一个&#39; lib&#39;并且&#39; head&#39;我的代码中的文件夹:: blocks project folder。
B中。下载&amp;安装必要的媒体
GLFW:
GLEW(OpenGL):
此时,你的头脑是&#39;文件夹应包含&#39; GLFW&#39;和&#39; GL&#39;文件夹和你的&#39; lib&#39;文件夹应包含&#39; glew32&#39;,&#39; glew32s&#39;,以及GLFW为您的编译器提供的所有库文件。
℃。配置代码:: blocks project
d。构建并运行您的代码:)!希望这可以帮助!