使用opengl和glfw绘制一个简单的立方体时,立方体的面看起来是透明的.这是代码.使用箭头键旋转.我刚刚在我的程序中封装成了一个类.使用Visual C++ Ultimate 2010.
#include "GAME.h"
using namespace std;
GAME::GAME()
{
glfwInit();
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_NORMALIZE);
}
int GAME::execute()
{
glfwOpenWindow(640, 320, 16, 16, 16, 16, 16, 16, GLFW_WINDOW);
glfwSetWindowTitle("Viraj");
glClearColor(1.0, 1.0, 1.0, 1.0);
glfwSetKeyCallback(events);
running = true;
while(glfwGetWindowParam(GLFW_OPENED))
{
glfwPollEvents();
loop();
render();
}
return 0;
}
void GAME::events(int key, int action)
{
switch(key)
{
case GLFW_KEY_UP:
glRotatef(10, 1, 0, 0);
break;
case GLFW_KEY_DOWN:
glRotatef(-10, 1, 0, 0);
break;
case GLFW_KEY_RIGHT:
glRotatef(10, 0, 1, 0);
break;
case GLFW_KEY_LEFT: …Run Code Online (Sandbox Code Playgroud) 我在使用 glfw 设置 OpenGL 3.3 应用程序时遇到问题。我得到
OpenGL profile requested but GLX_ARB_create_context_profile is unavailable
Run Code Online (Sandbox Code Playgroud)
当我尝试通过 optirun 运行我的应用程序时出错(我有 Nvidia Optimus 卡,所以没有其他方法)。其他 OpenGL > 3.3 应用程序与 optirun(unigine 天堂)配合良好......这是我尝试运行的代码,这是"optirun glxinfo" 的结果。
我正在使用这里找到的教程.我正在使用GLFW.我的窗口加载正常,但在打电话时
GLuint vertexBuffer;
glGenBuffers( 1, &vertexBuffer );
printf( "%u\n", vertexBuffer );
Run Code Online (Sandbox Code Playgroud)
它不是写入控制台,如果我关闭openGL窗口它会中断(不是我关闭控制台).我猜这指针有问题吗?但对我来说似乎是正确的,而且正如他在教程中所拥有的那样.
这是我的整个,非常小的.cpp(VS2012):
#define GLEW_STATIC
#include <GL/glew.h>
#include <GL/glfw.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment( lib, "glfw.lib")
#pragma comment( lib, "opengl32.lib")
#pragma comment( lib, "glew32s.lib")
int main() {
glfwInit();
glfwOpenWindowHint( GLFW_OPENGL_VERSION_MAJOR, 3 );
glfwOpenWindowHint( GLFW_OPENGL_VERSION_MINOR, 2 );
glfwOpenWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
glfwOpenWindowHint( GLFW_WINDOW_NO_RESIZE, GL_TRUE );
glfwOpenWindow( 800, 600, 0, 0, 0, 0, 0, 0, GLFW_WINDOW );
glfwSetWindowTitle( "OpenGL" );
printf("This works");
while( glfwGetWindowParam( GLFW_OPENED ) ) {
glfwSwapBuffers(); …Run Code Online (Sandbox Code Playgroud) 我试图让我的FPS显示在窗口标题中,但是我的程序却没有它。
我的FPS代码
void showFPS()
{
// Measure speed
double currentTime = glfwGetTime();
nbFrames++;
if ( currentTime - lastTime >= 1.0 ){ // If last cout was more than 1 sec ago
cout << 1000.0/double(nbFrames) << endl;
nbFrames = 0;
lastTime += 1.0;
}
}
Run Code Online (Sandbox Code Playgroud)
我也希望它在版本之后
window = glfwCreateWindow(640, 480, GAME_NAME " " VERSION " ", NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
但是我不能只将void ii转换为char?或者是什么 ?
基于这个问题,我能够为GLFW库制作一个默认的cmake编译,编译我的GLFW App并运行; 由于我使用的是Ubuntu 14.04 64位,所以一切正常并且是通过终端完成的.
我正在使用这一行来编译:
g++ -std=c++11 -c main.cpp
Run Code Online (Sandbox Code Playgroud)
这链接:
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
Run Code Online (Sandbox Code Playgroud)
使用这些命令后我只需要执行main.exec.但是,我想设置eclipse来编译和运行这个GLFW应用程序.包含文件已在项目中确定,但我的链接器出现问题.我试图手动跟踪我的库(GL,GLU,glfw3 ....)来设置文件夹,但我找不到所有这些.有谁知道我怎么能跟踪库在我的链接器上设置它们(项目 - 属性 - C/C++构建 - 设置 - GCC C++链接器)或者可以给我一些指导来解决这种情况,好吗?
提前致谢
我在使用GLFW的输入系统时遇到了困难,弄清楚如何让它按照我想要的方式工作,所以我来到了有更多智慧经验的人.使用GLFW 3.
有3种状态0释放,1按和2重复.这正是我想要的,只有从按下到重复的关键状态需要大约一秒钟才能改变.理想情况下,我希望它只有1帧状态"按",然后变为重复状态.
目标:能够根据我的密钥的状态轻松调用函数,如下所示:
按Tap(做一次)
重复连续(每帧都做)
释放不要回应
请查看上面链接中的文件,如果还有其他方法,请告诉我.或者这种做法本身就是垃圾,我这样做的方式是什么?谢谢大家,所有反馈和帮助相关.
所以基本上我正在编译使用GLFW的程序
现在我使用此命令成功编译它
gcc -o myprog glfw.c `pkg-config --static --libs glfw3`
Run Code Online (Sandbox Code Playgroud)
但是我想知道的是如何通过使用-l选项简单地编译它
我尝试了许多网站提供的描述,每次都有链接器DSO错误,我不知道如何解决它
这是我试过的最新版本
pkg-config --print-requires --print-requires-private glfw3
x11
xrandr
xinerama
xi
xxf86vm
xcursor
gl
Run Code Online (Sandbox Code Playgroud)
尝试使用这些链接选项后
gcc -o myprog glfw.c -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL
/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
这就是我得到的错误,我不知道如何解决它
我使用OpenGL,GLEW和GLFW拍摄同一网格的多个图像.网格(三角形)在每次拍摄中都不会改变,只会改变ModelViewMatrix.
这是我的主循环的重要代码:
for (int i = 0; i < number_of_images; i++) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
/* set GL_MODELVIEW matrix depending on i */
glBegin(GL_TRIANGLES);
for (Triangle &t : mesh) {
for (Point &p : t) {
glVertex3f(p.x, p.y, p.z);
}
}
glReadPixels(/*...*/) // get picture and store it somewhere
glfwSwapBuffers();
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我为每个要拍摄的镜头设置/传输三角形顶点.有没有解决方案,我只需要转移一次?我的网格非常大,所以这种转移需要相当长的时间.
我的目标是将球体放置在鼠标指向的位置(Z-coord为0).
我看到了这个问题,但我还没有理解MVP矩阵的概念,所以我研究了一下,现在我有两个问题:
如何从相机设置创建视图矩阵,如查找,眼睛和向上矢量?
我还阅读本教程的几种类型的相机,这一个WebGL的.
我仍然可以把它放在一起我不知道如何获得投影矩阵...
我应该采取哪些措施来实现所有这些目标?
为什么我的屏幕只是黑色?
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <stdio.h>
#include <stdlib.h>
//#include "include/state.h"
//#include "include/state_machine.h"
//#include "include/renderable.h"
const int WIDTH = 800;
const int HEIGHT = 600;
// called when user resizes window
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
glViewport(0, 0, width, height);
}
// called when we receive input
void processInput(GLFWwindow *window) {
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, 1);
}
GLuint get_checker_texture() {
unsigned char texDat[64];
for (int i = 0; i < 64; ++i)
texDat[i] = ((i + …Run Code Online (Sandbox Code Playgroud)