VS2010 C# 如何配置openGl ?

如何在VS2010 中搭配.net 的OpenGL环境?????????????????????????????????

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
OpenGL 拾取问题 C#+ OpenTK库 各位大佬,求帮助
![图片说明](https://img-ask.csdn.net/upload/201707/28/1501211840_758988.png) ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501211903_844359.png) ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501211912_645141.png) 获取到hits了,但不对,而且点大部分区域都能获取到。场景是一个半径一米的,全景球 ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501211974_508421.png)
OpenGL C#+OpenTK 拾取问题
![图片说明](https://img-ask.csdn.net/upload/201707/28/1501210804_204774.png) ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501210819_104382.png) ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501210830_138734.png) 不知道哪里不对,点大部分区域都能获取到,求指教 ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501210902_835799.png)
关于调用OpenGL的math3d库的问题
我想用Tao框架调用OpenGL,但是发现Tao框架里好像不含有OpenGL里的math3d库和shadermanager库, 请问怎么才能调用这两个库呢?或者我下载了math3d库的math3d.h和math3d.cpp, 我通过生成这两个文件的dll在C#中调用,这样可行吗?
OpenGL 默认的Z轴方向问题
OpenGL默认的Z坐标轴的方向是垂直窗口向外的,以前用C语言开发OpenGL程序时一直没有出现问题。现在我用C#开发OpenGL程序,却发现默认的Z轴方向是垂直窗口向内,真的搞不懂怎么回事。我没有使用模型变换和投影变换,仅仅是是在窗口绘制两个简单的图形,发现Z坐标为负的图形可以看得见,而Z坐标为正的图形却被覆盖。已经开启了深度测试。代码如下: ``` void Draw() { GL.glEnable(GLCONST.GL_DEPTH_TEST); GL.glClear(GLCONST.GL_COLOR_BUFFER_BIT); GL.glClear(GLCONST.GL_DEPTH_BUFFER_BIT); //红色的三角形,Z=0; GL.glBegin(GLCONST.GL_TRIANGLES); GL.glColor3(1f, 0f, 0f); GL.glVertex3(-0.5f, -0.5f,0f); GL.glVertex3(0.5f, -0.5f,0f); GL.glVertex3(0f, 0.5f,0f); GL.glEnd(); //绿色的直线,Z=-0.5 GL.glColor3(0f, 1f, 0f); GL.glBegin(GLCONST.GL_LINES); GL.glVertex3(-0.8f, 0f, -0.5f); GL.glVertex3(0.8f, 0f, -0.5f); GL.glEnd(); //蓝色的直线,Z=0.5 GL.glColor3(0f, 0f, 1f); GL.glBegin(GLCONST.GL_LINES); GL.glVertex3(0f, 0.8f, 0.5f); GL.glVertex3(0f, -0.8f, 0.5f); GL.glEnd(); GL.glFlush(); } ``` 绘制时,发现红色的三角形(Z=0)会把蓝色的直线(Z=0.5)掩盖,而绿色的直线(Z=-0.5)浮在三角形之上。效果如下图: ![图片说明](https://img-ask.csdn.net/upload/201712/28/1514439525_203737.jpg) 这种问题,似乎有不少人遇到,但都没有的到很好的解决。特此悬赏160金币,希望有人能解决。只要提供解决的方法,或者给予启示,或者提供线索都可以获得悬赏。
QtCreator中OpenGL配置GLFW库
我用QtCreator配置openGL的环境,GLAD库已经配置好了,编译也能通过。但是GLFW的库我折腾了半天都不行,qt的include文件夹我包含了GLFW的头文件,引用的时候输入#include<GLFW/glfw3.h>编译也能过,但是当我在main函数里调用glfwInit()函数的时候,就一直提示undefined reference to 'glfwinit'。 有大佬告知一下这什么情况吗,重复一下,我用的开发环境是QtCreator,不是vs,不是vs,不是vs。![图片说明](https://img-ask.csdn.net/upload/201908/30/1567151975_155057.png)
如何 hook 夜神模拟器最新版 的OpenGL中的wglswapbuffers 函数 并且被执行能够跳转到我自己的函数
我想hook 夜神模拟器最新版的客户端 内部设置是opengl 渲染 我用dependency 查看过 它最新版客户端的 dll依赖情况,发现一个问题,它并没有直接依赖gdi32.dll 和opengl32.dll 而是依赖了glut32.dll 然后 这个dll依次依赖上面的2个dll 我现在 去hook gdi32.dll 中的SwapBuffers 函数 hook了但是没有被执行所以没有跳转到我的 函数中,hook opengl32.dll中的 wglSwapBuffers 函数也是一样。
QT5中如何使用glfw库,与opengl结合较好的gui推荐?
# 问题: 如题,本人学习了Qt和OpenGL(在windows环境下) 其中,Qt版本为5.9.1,OpenGL是现代OpenGL,使用的是glfw库, 按照LearnOpenGL网站学习的差不多了,现在需要把opengl与Qt结合起来。 看了好多博客都是用的Qt自带的QOpenGL,使用glut库。如果您知道如何将Qt5与glfw库结合起来,请告知,万分感谢! 如果结合很困难,是否有其他gui推荐
通过opengl库绘制的模型,能否存储为某种三维模型格式
通过opengl库绘制一个简单的三维模型,我想把这个模型存贮为某种格式,然后可以用别的软件打开,可以实现吗
OpenGL中的ModelMatrix如何在Shader中使用
以下是普通的C# OpneGL代码: GL.Viewport(0, 0, glWin.Width, glWin.Height); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.MatrixMode(MatrixMode.Modelview); GL.LoadIdentity(); GL.Scale(0.5, 0.5, 0.5); GL.Rotate(60, 1, 0, 0); GL.Translate(1, 0, 0); float[] mat = new float[16]; GL.GetFloat(GetPName.ModelviewMatrix, mat); GL.GetFloat(GetPName.ProjectionMatrix, mat); GL.Begin(PrimitiveType.Triangles); GL.Color3(Color.MidnightBlue); GL.Vertex2(-1.0f, 1.0f); GL.Color3(Color.SpringGreen); GL.Vertex2(0.0f, -1.0f); GL.Color3(Color.Ivory); GL.Vertex2(1.0f, 1.0f); GL.End(); 移植到WebGL时,由于只能使用Shader的关系,所以先通过 GetFloat 取得了C#运行时的ModelMatrix值。然后在 js 中直接把该值传入到下面的VertexShader的MVMatrix里面,但是 画出的效果却不相同。 attribute vec3 ModelVertex; uniform mat4 MVMatrix; void main(void){ gl_Position = vec4(ModelVertex, 1.0) * MVMatrix; } Shader是不是写错了?
xcode OpenGL输出一个窗口
具体错误信息: Starting GLFW context, OpenGL 3.3 2017-03-31 11:00:23.247187+0800 opengl[6941:354760] [General] ERROR: Setting <GLFWContentView: 0x100519d60> as the first responder for window <GLFWWindow: 0x10030e700>, but it is in a different window ((null))! This would eventually crash when the view is freed. The first responder will be set to nil. ( 0 AppKit 0x00007fff957aea3f -[NSWindow _validateFirstResponder:] + 557 1 AppKit 0x00007fff94f29b1c -[NSWindow _setFirstResponder:] + 31 2 AppKit 0x00007fff94fd1d9e -[NSWindow _realMakeFirstResponder:] + 406 3 AppKit 0x00007fff94fd1bb4 -[NSWindow makeFirstResponder:] + 123 4 libglfw.3.dylib 0x00000001000b9895 _glfwPlatformCreateWindow + 631 5 libglfw.3.dylib 0x00000001000b5430 glfwCreateWindow + 487 6 opengl 0x0000000100000fdf main + 159 7 libdyld.dylib 0x00007fffacb7d235 start + 1 8 ??? 0x0000000000000001 0x0 + 1 ) Failed to create GLFW window Program ended with exit code: 255 代码如下 #include <iostream> // GLEW #define GLEW_STATIC #include <glew.h> // GLFW #include <glfw3.h> // Window dimensions const GLuint WIDTH = 800, HEIGHT = 600; // The MAIN function, from here we start the application and run the game loop int main() { std::cout << "Starting GLFW context, OpenGL 3.3" << std::endl; // Init GLFW glfwInit(); // Set all the required options for GLFW glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); // Create a GLFWwindow object that we can use for GLFW's functions GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr); if (window == nullptr) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } }
opengl向sharpgl怎么转换?
GLfloat diffuseMaterial[4] = { 0.5, 0.5, 0.5, 1.0 };用C#和sharpGL怎么改?修改后的程序是怎样的,请大神告知
用完cmake后原本可以运行的opengl程序报错“(ig9icd32.dll)处引发的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突。”
环境:win10 64bit 软件:vs 2017 cmake-3.16.0 每次使用cmake编译文件,按[这个](https://blog.csdn.net/sda42342342423/article/details/78218920 "") 一步步配置openmesh,打开gui一些参数的配置如下: ![这是我在编译前的选择](https://img-ask.csdn.net/upload/201910/13/1570940862_404209.png) 点configure还一切正常,不过有一片红的区域的checkbox。完事后点generate就报错了: ![图片说明](https://img-ask.csdn.net/upload/201910/13/1570941123_218651.png) 怀着不幸的预感打开vs,新建控制台应用程序,按网上继续配置参数。 一debug果然报错: ``` E0035 #error 指令: "You have to define _USE_MATH_DEFINES in the compiler settings!" 大作业 F:\download\OpenMesh-8.0\src\OpenMesh\Core\System\compiler.hh 110 C1189 #error: "You have to define _USE_MATH_DEFINES in the compiler settings!" 大作业 f:\download\openmesh-8.0\src\openmesh\core\system\compiler.hh 110 ``` 更不幸的是原本可以运行的opengl也不能运行了: ``` 0x0319C5D5 (ig9icd32.dll)处(位于 exp1_BreAndDDA.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突。 ``` 救救孩子,不想再重装系统了/泪目 谢谢大佬们
vs2015环境下OpenGL中怎样实现鼠标右键控制物体旋转
#include "StdAfx.h" #include "CloudPoint.h" #define GLUT_DISABLE_ATEXIT_HACK #include <GL/glut.h> #include <math.h> #include <stdio.h> CCloudPoint::CCloudPoint(void) { } CCloudPoint::~CCloudPoint(void) { } CCloudPoint *CCloudPoint::s_pCurrent = NULL; char *m_cFilename = NULL; //int CCloudPoint::s_argc = 0;//char** CCloudPoint::s_argv = 0; bool mouseLeftDown; bool mouseRightDown; float CCloudPoint::c=3.1415926535/180.0f; //弧度和角度转换参数 int CCloudPoint::du=90,CCloudPoint::oldmy=-1,CCloudPoint::oldmx=-1; //du是视点绕y轴的角度,opengl里默认y轴是上方向 float CCloudPoint::r=0.3f,CCloudPoint::h=0.0f; //r是视点绕y轴的半径,h是视点高度即在y轴上的坐标 int CCloudPoint::scale = 10; int CCloudPoint::iWindowsWidth = 800, CCloudPoint::iWindowHeight = 800; float CCloudPoint::x[1000000], CCloudPoint::y[1000000], CCloudPoint::z[1000000]; int CCloudPoint::iPointNumber = 0; int mButton = -1; void CCloudPoint::setFilename(char * m_cFilename) { this->m_cFilename = m_cFilename; } char* CCloudPoint::getFilename() { return m_cFilename; } void CCloudPoint::MouseCallback(int button, int state, int x, int y) { CCloudPoint::s_pCurrent->Mouse(button, state, x, y); } void CCloudPoint::onMouseMoveCallback( int x,int y) { CCloudPoint::s_pCurrent->onMouseMove( x,y); } void CCloudPoint::reshapeCallback(int w,int h) { CCloudPoint::s_pCurrent->reshape(w,h); } void CCloudPoint::myDisplayCallback(void) { CCloudPoint::s_pCurrent->myDisplay(); } void CCloudPoint::Mouse(int button, int state, int x, int y) //处理鼠标点击 { if (state == GLUT_DOWN) { oldmx = x, oldmy = y; } else { if (state == GLUT_UP && button == GLUT_WHEEL_UP) { if (scale>1) scale -= 1; else scale = 1; //glutPostRedisplay(); } else if (state == GLUT_UP && button == GLUT_WHEEL_DOWN) { scale += 1; //glutPostRedisplay(); } else if (state == GLUT_DOWN && button == GLUT_RIGHT_BUTTON) { mouseRightDown = true; } else if (state == GLUT_DOWN && button == GLUT_LEFT_BUTTON) { mouseLeftDown = true; } } } void CCloudPoint::onMouseMove(int x,int y) //处理鼠标拖动 { //printf("%d\n",du); if (mouseRightDown) { du += x - oldmx; //鼠标在窗口x轴方向上的增量加到视点绕y轴的角度上,这样就左右转了 h += 0.03f*(y - oldmy); //鼠标在窗口y轴方向上的改变加到视点的y坐标上,就上下转了 if (h > 1.0f) h = 1.0f; //视点y坐标作一些限制,不会使视点太奇怪 else if (h < -1.0f) h = -1.0f; oldmx = x, oldmy = y; //把此时的鼠标坐标作为旧值,为下一次计算增量做准备 } } void CCloudPoint::init() { glEnable(GL_DEPTH_TEST); } void CCloudPoint::reshape(int w,int h) { glViewport( 0, 0, (GLsizei)w, (GLsizei)h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective(90.0f, (GLfloat)w / (GLfloat)h, 1.0f, 1.0f); glMatrixMode( GL_MODELVIEW ); } void CCloudPoint::loadFile(char *cFileName) { FILE* file = fopen(cFileName,"r"); if (!file) { printf("load file %s failed\n",cFileName); } else { /*fseek(file,0,SEEK_END); long fileSize = ftell(file);*/ char buffer[1000]; while(fgets(buffer,300,file) != NULL) { sscanf(buffer,"%f, %f, %f", &x[iPointNumber], &y[iPointNumber], &z[iPointNumber]); iPointNumber++; //printf("x=%f, y=%f, z=%f\n", x, y, z); } } } void CCloudPoint::myDisplay(void) { int i; /*glClear(GL_COLOR_BUFFER_BIT);*/ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //printf("At:%.2f %.2f %.2f\n",r*cos(c*du),h,r*sin(c*du)); //这就是视点的坐标 gluLookAt(r*cos(c*du), h, r*sin(c*du), 0, 0, 0, 0, 1.0f, 0); //从视点看远点,y轴方向(0,1,0)是上方向 glBegin(GL_POINTS); /*glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(0.5f, 0.5f, 0.5f);*/ for (i = 0; i < iPointNumber; i++) { glVertex3f(x[i]/scale, y[i]/scale, z[i]/scale); } glEnd(); glFlush(); glutSwapBuffers(); } void CCloudPoint::LoadAndShow() { int argc=1; char* argv[]={"good"}; //loadFile(CCloudPoint::getFilename()); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowPosition(100, 0); glutInitWindowSize(iWindowsWidth, iWindowHeight); glutCreateWindow("OpenGL程序"); init(); glutReshapeFunc(CCloudPoint::reshapeCallback); glutDisplayFunc(myDisplayCallback); /*glutDisplayFunc(display);*/ glutIdleFunc(CCloudPoint::myDisplayCallback); //设置不断调用显示函数 glutMouseFunc(CCloudPoint::MouseCallback); glutMotionFunc(CCloudPoint::onMouseMoveCallback); glutMainLoop(); return; } 上面是我的代码,但是没有用,如果将void CCloudPoint::onMouseMove(int x,int y) 中的if语句去掉,就是任意鼠标键移动控制旋转,想问问大神
(OpenGL)0xC0000005: 执行位置 0x0000000000000000 时发生访问冲突,运行glBindBuffer函数时崩溃。
1.运行一个OpenGL/CUDA相结合的样例程序,main.cpp编译成功。运行可执行文件时图形界面无法成功运行,调试过程中显示在glBindBuffer函数处程序报错。 2.main.cpp代码: ``` #include "kernel.h" #include <stdio.h> #include <stdlib.h> #ifdef _WIN32 #define WINDOWS_LEAN_AND_MEAN #define NOMINMAX #include <windows.h> #endif #ifdef __APPLE__ #include<GLUT/glut.h> #else #include <GL/glew.h> #include <GL/freeglut.h> #endif #include <cuda_runtime.h> #include <cuda_gl_interop.h> #include "interactions.h" //texture and pixel objects GLuint pbo = 0;//OpenGL pixel buffer object GLuint tex = 0;//OpenGL texture object struct cudaGraphicsResource *cuda_pbo_resource; void render() { uchar4 *d_out = 0; cudaGraphicsMapResources(1, &cuda_pbo_resource, 0); cudaGraphicsResourceGetMappedPointer((void**)&d_out, NULL, cuda_pbo_resource); kernelLauncher(d_out,W, H, loc); cudaGraphicsUnmapResources(1, &cuda_pbo_resource, 0); } void drawTexture() { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, W, H, 0, GL_RGBA,GL_UNSIGNED_BYTE,NULL); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(0, 0); glTexCoord2f(0.0f, 1.0f); glVertex2f(0, H); glTexCoord2f(1.0f, 1.0f); glVertex2f(W, H); glTexCoord2f(1.0f, 0.0f); glVertex2f(W, 0); glEnd(); glDisable(GL_TEXTURE_2D); } void display() { render(); drawTexture(); glutSwapBuffers(); } void initGLUT(int *argc, char** argv) { glutInit(argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowSize(W,H); glutCreateWindow(TITLE_STRING); #ifdef __APPLE__ glewInit(); #endif } void initPixelBuffer() { GLuint pbo = 0; glGenBuffers(1, &pbo); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo); glBufferData(GL_PIXEL_UNPACK_BUFFER, 4 * W * H * sizeof(GLubyte), 0, GL_STREAM_DRAW); GLuint tex = 0; glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); cudaGraphicsGLRegisterBuffer(&cuda_pbo_resource, pbo, cudaGraphicsMapFlagsWriteDiscard); } void exitfunc() { if (pbo) { cudaGraphicsUnregisterResource(cuda_pbo_resource); glDeleteBuffers(1, &pbo); glDeleteTextures(1, &tex); } } int main(int argc,char** argv) { printInstructions(); initGLUT(&argc, argv); gluOrtho2D(0, W, H, 0); glutKeyboardFunc(keyboard); glutSpecialFunc(handleSpecialKeypress); glutPassiveMotionFunc(mouseMove); glutMotionFunc(mouseDrag); glutDisplayFunc(display); initPixelBuffer(); glutMainLoop(); atexit(exitfunc); return 0; } ``` 3.报错信息:0x0000000000000000 处(位于 dist_2d_cuda.exe 中)引发的异常: 0xC0000005: 执行位置 0x0000000000000000 时发生访问冲突。 请问具体是什么问题呢,向各位求助~
如何使用Cmake构建OpenGL项目?用的CLion编辑器
最近在学OpenGL,下面的是一个简单的画线段程序,可以在VS2017上面运行,但VS有点卡,于是试着在CLion上面运行。 ``` #include <stdlib.h> #include <glut.h> void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 200.0, 0.0, 150.0); } void lineSegment(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); glBegin(GL_LINES); glVertex2i(100, 0); glVertex2i(0, 75); glEnd(); glFlush(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 300); glutCreateWindow("测试"); init(); glutDisplayFunc(lineSegment); glutMainLoop(); } ``` CMakeList文件 ``` cmake_minimum_required(VERSION 3.8) project(learnOpenGL) set(CMAKE_CXX_STANDARD 11) include_directories(C:/glut) link_directories(C:/glut) #find_library(libsrc glut C:/glut) #message(${libsrc}) set(SOURCE_FILES main.cpp) add_executable(learnOpenGL ${SOURCE_FILES}) #target_link_libraries( learnOpenGL ${libsrc}) target_link_libraries( learnOpenGL glut) ``` Build报错,如下? ``` C:/PROGRA~1/DevCpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/glut/glut.lib when searching for -lglut C:/PROGRA~1/DevCpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/glut/glut.dll when searching for -lglut C:/PROGRA~1/DevCpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/glut/glut.lib when searching for -lglut C:/PROGRA~1/DevCpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/glut/glut.dll when searching for -lglut C:/PROGRA~1/DevCpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/glut\glut.lib when searching for -lglut C:/PROGRA~1/DevCpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lglut collect2.exe: error: ld returned 1 exit status mingw32-make.exe[3]: *** [learnOpenGL.exe] Error 1 CMakeFiles\learnOpenGL.dir\build.make:96: recipe for target 'learnOpenGL.exe' failed CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/learnOpenGL.dir/all' failed mingw32-make.exe[2]: *** [CMakeFiles/learnOpenGL.dir/all] Error 2 mingw32-make.exe[1]: *** [CMakeFiles/learnOpenGL.dir/rule] Error 2 CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/learnOpenGL.dir/rule' failed mingw32-make.exe: *** [learnOpenGL] Error 2 Makefile:117: recipe for target 'learnOpenGL' failed ``` 折腾两天了,无论百度还是google都没有很好的实例。
Linux 下编译c++ opengl的小程序
完整的代码如下 ``` #include <GL/glut.h> #include <cmath> #include <utility> #include <vector> using std::vector; using std::pair; vector<pair<int, int> > my_points(4); vector<pair<int, int> > current_point(4); my_points.push_back(make_pair(0, 0)); my_points.push_back(make_pair(50, 0)); my_points.push_back(make_pair(100, 0)); my_points.push_back(make_pair(150, 0)); current_point = my_points; struct Degree { Degree(int a, int b, int c) { first = a; second = b; third = c; } int first; int second; int third; }; map<int, Degree> position(4); position[0] = position(0, 0, 0); position[1] = position(90, 0, 0); position[2] = position(45, -45, 45); position[3] = position(-90, 0, 0); void init(); void display(); void draw_axis(); void reshape(int w, int h); void draw_frame(void); void translate(Degree& posi); void keyboard(unsigned char key, int x, int y); float matrix_rotat[3][3] = { // 旋转矩阵 {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {0.0, 0.0, 1.0} }; int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(0, 0); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); } void init(void) { glClearColor(0.1, 0.2, 0.4, 0.0); glShadeModel (GL_SMOOTH); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); if (w <= h) gluOrtho2D(-200.0, 250.0, -100.0*(GLfloat)h/(GLfloat)w, 200.0*(GLfloat)h/(GLfloat)w); else gluOrtho2D(-200.0*(GLfloat)w/(GLfloat)h, 250.0*(GLfloat)w/(GLfloat)h, -50.0, 200.0); glColor3f(1, 0.5, 0.4); glMatrixMode(GL_MODELVIEW); } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1, 0.5, 0.4); draw_axis(); glLoadIdentity(); // draw_frame(); glFlush (); } void draw_frame() { glShadeModel(GL_SMOOTH); glBegin (GL_LINE_STRIP);//draw frame for (int i = 0; i < 4; i++) { glColor3f(1.0, 0.0, 0.0); glVertex2f(current_point[i].first, current_point[i].second); } glEnd(); } void draw_axis() { // draw coordinate axis glBegin(GL_LINES); glColor3f(1.0, 1.0, 1.0); // x axis glVertex2f(-500.0, 40.0); glVertex2f(500.0, 40.0); glColor3f(1.0, 1.0, 1.0); // y axis glVertex2f(0.0, 400.0); glVertex2f(0.0, -400.0); glEnd(); // draw scale glBegin(GL_LINES); for (int i = -50; i <= 50; i++) { // x axis glColor3f(1.0, 1.0, 1.0); glVertex2f(10.0*i, 40.0); glVertex2f(10.0*i, 44.0); } for (int i = -40; i <= 40; i++) { // y axis glColor3f(1.0, 1.0, 1.0); glVertex2f(0.0, 10.0*i); glVertex2f(4.0, 10.0*i); } glEnd(); } void translate(Degree& posi) { ///// changed into matrix later vector<vector<double> > trans_matrix(2); for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) trans_matrix[i].push_back(0); double num1[] = {cos(posi.first), -sin(posi.first)}; //initialize the transform matrix for (int i = 0; i < 2; i++) trans_matrix[0][i] = num1[i]; double num2 = {sin(posi.first), cos(posi.first)}; for (int i = 0; i < 2; i++) trans_matrix[1][i] = num2[i]; current_point[0].first = current_point[0].second = 0; for (int i = 0; i < 2; i++) { current_point[0].first += (trans_matrix[i][0]*my_points[0].first + trans_matrix[i][1]*my_points[1].second); current_point[0].second += (trans_matrix[i][0]*my_points[0].first + trans_matrix[i][1]*my_points[0].second); } glBegin (GL_LINES);//draw frame glColor3f(1.0, 0.0, 0.0); glVertex2f(0, 0); glVertex2f(current_point[0].first, current_point[0].second); glEnd(); } /* void rotate_frame(void) { float (*tmp_frame)[7] = new float[3][7]; memset(tmp_frame, 0.0, sizeof(tmp_frame)); frame = tmp_frame; glLoadIdentity(); draw_frame(); // draw the frame after transformation glFlush(); } */ void keyboard(unsigned char key, int x, int y) { switch (key) { case 'Q': case 'q': translate(position[0]); break; case 'W': case 'w': translate(position[1]); break; case 'E': case 'e': translate(position[2]); break; case 'R': case 'r': translate(position[3]); break; } } ``` 编译器报错> arm.cpp:12:1: error: ‘my_points’ does not name a type my_points.push_back(make_pair(0, 0)); ^ arm.cpp:13:1: error: ‘my_points’ does not name a type my_points.push_back(make_pair(50, 0)); ^ arm.cpp:14:1: error: ‘my_points’ does not name a type my_points.push_back(make_pair(100, 0)); ^ arm.cpp:15:1: error: ‘my_points’ does not name a type my_points.push_back(make_pair(150, 0)); ^ arm.cpp:16:1: error: ‘current_point’ does not name a type current_point = my_points; ^ arm.cpp:28:1: error: ‘map’ does not name a type map<int, Degree> position(4); ^ arm.cpp:30:1: error: ‘position’ does not name a type position[0] = position(0, 0, 0); ^ arm.cpp:31:1: error: ‘position’ does not name a type position[1] = position(90, 0, 0); ^ arm.cpp:32:1: error: ‘position’ does not name a type position[2] = position(45, -45, 45); ^ arm.cpp:33:1: error: ‘position’ does not name a type position[3] = position(-90, 0, 0); ^ 不知道这里是什么问题,STL为什么不能用,是编译选项的问题吗? 编译命令g++ arm.cpp -o arm -lGL -lglut -lGLU
openGL运行不显示图形
代码如下 #include<GL/glut.h> #include<windows.h> void init(); void reshape(int w, int h); void display(void); void init(void) { glClearColor(1, 1, 0, 1.0); //指定清除颜色,即背景颜色 glShadeModel(GL_FLAT); } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, (double)w, 0, (double)h); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); int x[5] = { 180,120,140,220,240 }; int y[5] = { 180,140,60,60,140 }; ////*****五边形 glBegin(GL_LINE_LOOP); glColor3f(1, 0, 0); for (int i = 0;i < 5;i++) { glVertex2i(x[i], y[i]); } glEnd(); //*****五角星 glBegin(GL_LINES); glColor3f(0, 1, 0); for (int i = 0;i < 5;i++) { glVertex2i(x[i], y[i]); if (i + 2 > 4) { int j = (i + 2) % 5; glVertex2i(x[j], y[j]); } glVertex2i(x[i+2], y[i+2]); } glEnd(); glFlush(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); //初始化GLUT并处理命令行参数 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //指定模式:双缓存;RGB模式 glutInitWindowSize(500, 500); //指定窗口大小(像素) glutInitWindowPosition(50, 50); //指定窗口左上角在屏幕上的位置 glutCreateWindow("五角星"); //使用OpenGL场景创建一个窗口,参数为窗口名称 init(); //调用初始化函数 glutDisplayFunc(display); //显示 glutReshapeFunc(reshape); //重绘 glutMainLoop(); return 0; //ANSI C要求函数main()返回一个int值 } ``` ```
关于glew库使用找不到标识符分问题
错误 48 error C3861: “glDrawElementsBaseVertex”: 找不到标识符 c:\users\twjcxf\downloads\opengl course1\opengl course\opengl course\texture\mesh.cpp 233 1 Texture 95 IntelliSense: 未定义标识符 "glDrawElementsBaseVertex" c:\Users\TWJCXF\Downloads\OpenGL Course1\OpenGL Course\OpenGL Course\Texture\mesh.cpp 234 3 Texture 我引用了头文件#include <GL/glew.h> 包含目录也没有问题,glew.h中是含有glDrawElementsBaseVertex的定义的
openGL的glutReshapeFunc()函数重绘时的问题
写了一个opengl程序,画一个正六边形,想要实现无论怎样改变窗口的大小,六边形的形状大小位置都不变。 于是用glutReshapeFunc()得到窗口改变后的长与宽,然后再重新设置gluOrtho2D(),以实现一个像素对应一个坐标大小。 写好运行,发现改变窗口大小后,只有六边形的中心位置没有发生变化,而六边形的大小随窗口大小的改变在x,y方向上等比例**缩小**。 如果glutReshapeFunc()没有起作用的话,那么六边形也应该等比例在x,y方向上放大才对。但是现在却是缩小,有点搞不懂了,特来请教一下大家,下面附上代码: ``` #include <GL/glut.h> #include <math.h> #include <stdlib.h> const double TWO_PI = 6.2831853; /* Intial display-window size.*/ GLsizei winWidth = 400, winHeight = 400; GLuint regHex; class screenPt { private: GLint x,y; public: /* Default Constructor: initializes coordinate position to (0, 0).*/ screenPt ( ) { x = y = 0; } void setCoords (GLint xCoord, GLint yCoord) { x = xCoord; y = yCoord; } GLint getx () const { return x; } GLint gety () const { return y; } }; static void init (void) { screenPt hexVertex, circCtr; GLdouble theta; GLint k; /* Set circle center coordinates.*/ circCtr.setCoords (winWidth / 2, winHeight/2); glClearColor (1.0, 1.0, 1.0, 0.0);//Display-window color = white. /* Set up a display list for a red regular hexagon. * Vertices for the hexagon are Six equally spaced * points around the circumference of a circle. */ regHex = glGenLists (1); // Get an identifier for the display list. glNewList (regHex, GL_COMPILE); glColor3f (1.0, 0.0, 0.0); // Set fill color for hexagon to red. glBegin (GL_POLYGON); for (k = 0; k < 6; k++){ theta = TWO_PI * k / 6.0; hexVertex.setCoords (circCtr.getx () + 150 * cos (theta), circCtr.gety () + 150 * sin (theta)); glVertex2i (hexVertex.getx (), hexVertex.gety ()); } glEnd (); glEndList (); } void regHexagon (void) { glClear (GL_COLOR_BUFFER_BIT); glCallList (regHex); glFlush(); } void winReshapeFcn (int newWidth, int newHeight) { glMatrixMode (GL_PROJECTION); glLoadIdentity ( ); gluOrtho2D (0.0, (GLdouble) newWidth, 0.0, (GLdouble) newHeight); glClear (GL_COLOR_BUFFER_BIT); } int main (int argc, char** argv) { glutInit (&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition (100, 100); glutInitWindowSize (winWidth, winHeight); glutCreateWindow ("Reshape-Function & Display-List Example"); init ( ); glutDisplayFunc (regHexagon); glutReshapeFunc (winReshapeFcn); glutMainLoop (); return 0; } ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
前端 | 2. 正则
转载请注明以下: 本文转自清自以敬的博客:https://blog.csdn.net/qq_45791147 文章目录1.转义2.正则表达式初步2.1.匹配字符2.1.1.组成元素2.1.2.基础正则的设计 1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转义...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
Docker 从入门到掉坑
Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器。但是docker本身和虚拟机还是有较为明显的出入的。我大致归纳了一下,可以总结为以下几点: docker自身也有着很多的优点,关于它的优点,可以总结为以下几项: 安装docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Doc...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问