请问tina linux系统的ARM开发板如何使用glew、glut库吗?

我现在需要在tina linux系统的arm开发板上编译一个显示库Pangolin,小板的系统中自带了下面几个文件:

libEGL.so libGLESv1_CM.so libGLESv2.so libMali.so

下面是Pangolin库的cmakelist文件:

if(ANDROID OR IOS)

set(HAVE_GLES 1)

option(BUILD_FOR_GLES_2 "Build for OpenGL ES 2 instead of ES 1" ON )

if(BUILD_FOR_GLES_2)

   set(HAVE_GLES_2 1)

endif()

endif()

if(_OSX_)

set(CMAKE_MACOSX_RPATH ON)

endif()

还有关联的子cmakelist文件

Library sources

if(BUILD_PANGOLIN_GUI)

if( ANDROID )

  # Android specific display code

  list(APPEND HEADERS ${INCDIR}/display/device/display_android.h )

  list(APPEND SOURCES display/device/display_android.cpp )

  if(HAVE_GLES_2)

      list(APPEND LINK_LIBS "-lEGL;-lGLESv2" )

  else()

      list(APPEND LINK_LIBS "-lEGL;-lGLESv1_CM" )

  endif()

else()

  find_package(OpenGL REQUIRED QUIET)

  list(APPEND USER_INC  "${OPENGL_INCLUDE_DIR}" )

  list(APPEND LINK_LIBS "${OPENGL_LIBRARIES}" )

  if(NOT BUILD_EXTERN_GLEW)

      find_package(GLEW REQUIRED QUIET)

  endif()

  if(GLEW_FOUND)

      list(APPEND USER_INC  "${GLEW_INCLUDE_DIR}" )

然后遇到了下面几个问题,嵌入式平台有GLEW GLUT库吗?tina linux系统也没有X11库,然后我从下面网站下载的X11库,编译时会不断依赖新的库,由于依赖太多,都开始怀疑自己的方法对不。

libx11 (armv7h) | Packages | Arch Linux ARM

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
怎样在mingw中配置glew
我是OpenGL初学者,使用的开发环境是codeblocks+mingw,已经完成了glut的配置 但是就是无法完成glew。我所缺少的就是.a文件和.dll文件。已经纠结了很长时间 使用过reimp转换库.lib到.a但是转换的库无法使用。
关于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的定义的
linux下使用codeblocks学习OpenGL
我最近开始在linux下学习OpenGL,系统是CentOS,下载了OpenGL超级宝典第五版及源码,安装了mesa、glut、glew等依赖项,使用源码中提供的makefile编译源码能成功,可是我把GLTools文件夹拷到自己的工程文件夹下面,并设置了GLTools/include为搜索路径,也将GLTools/src下的文件都添加到了项目中,编译第一个源码的时候总是通不过,先是说GLenum、GLuint等类型没有定义,我改动了一下,将include glew.h之前的ifdefine给去掉了,结果又显示在glew.h之前包含了gl.h。。。。问题来了: 1、用make可以编译成功,是不是说明我机器上的基本配置没有问题? 2、我使用codeblocks开发,如何将书中的GLTools添加到我自己的项目中才能正确运行? 弄了两天了,快崩溃了,希望哪个兄弟来帮帮忙,再不行,只能回去用windows了。先谢谢了!
OpenGL的GLEW库在Xcode里怎么链接?
我已经通过Brew安装了GLEW, 但是不知道怎么通过Xcode链接。新版本Xcode8.2.1,上的Header Search Paths 有DeBug 和Release。搞不懂怎么弄。求助。。。。
关于安装opengl开发环境后编译出现“无法解析的外部符号”的问题
本人使用的是win7 64位家庭普通版系统,以及visual studio 2012,照网上说明安装了glew,freeglut,glut后 输入一段代码之后,函数什么的都可以正常变色 代码什么的都是蓝宝书上边的应该没有什么问题,粘贴一部分上来: glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600); glutCreateWindow("Triangle"); 各种dll也照网上说的放进sysWOW64文件夹里面了,为什么还会出现这种问题...... 网上实在搜不到其他解决办法,望各位大神能够指点一下^_^
glGetTextureHandleNV在OpenGL哪个库中
在linux环境下,我已经包含了glew.h,但是代码中无法识别该函数, 查看了libGLEW.a文件,也没有包含该函数的符号,我想知道是不是还有其他头文件中有该函数,到底在哪个库中实现了?
cocos2d-x 无法打开glew.lib
本人是vs2012 由于vs13只安装了一半中间退出,现在运行cocos2d程序出现 无法打开glew.lib问题 求大神解答,在线等
(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 时发生访问冲突。 请问具体是什么问题呢,向各位求助~
opengl宝典示例代码在vs2017上各种报错,求帮助,快哭了。。。
我把opengl超级宝典第五版的第一个示例代码放到我的工程里,vs用的2017的,freeglut2.6,gltools包含了glew的情况下,还是各种报错,几乎一行一到两个错,编译都通不过,小白求各位过来人指点一下,想尽快先入个门,下面是我放进来的代码和报错,大家看看为什么,是环境的问题吗? #include <GLTools.h> #include <GLShaderManager.h> #ifdef __APPLE #include <glut/glut.h> #else #define FREEGLUT_STATIC #include <GL/glut.h> #endif // __APPLE #include <GL/glut.h> #include "stdafx.h" GLBatch triangleBatch; GLShaderManager shaderManager; //62 CHAPTER 2 Getting Started //04_0321712617_ch02.qxd 6/21/10 11:35 AM Page 62 void ChangeSize(int w, int h) { glViewport(0, 0, w, h); } void SetupRC() { glClearColor(0.0f, 0.0f, 1.0f, 1.0f); shaderManager.InitializeStockShaders(); GLfloat vVerts[] = { -0.5f,0.0f,0.0f, 0.5f,0.0f,0.0f, 0.0f,0.5f,0.0f }; triangleBatch.Begin(GL_TRIANGLES, 3); triangleBatch.CopyVertexData3f(vVerts); triangleBatch.End(); } void RenderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); GLfloat vRed[] = { 1.0f,0.0f,0.0f,1.0f }; shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed); triangleBatch.Draw(); glutSwapBuffers(); } int main(int argc, char* argv[]) { gltSetWorkingDirectory(argv[0]); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600); glutCreateWindow("Triangle"); glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); return 1; } SetupRC(); glutMainLoop(); return 0; } ``` 还有就是我没太懂作者这两行什么鬼 62 CHAPTER 2 Getting Started 04_0321712617_ch02.qxd 6/21/10 11:35 AM Page 62 ``` 下面是报错信息,太多了(捂眼) ![图片说明](https://img-ask.csdn.net/upload/201907/09/1562677843_255165.png) ![图片说明](https://img-ask.csdn.net/upload/201907/09/1562677855_650720.png) 最后就是这么多报错,应该就不是代码的问题,是不是有什么地方缺了什么东西啊,为什么写的时候不报错,一编译就全出来了呢,哭了。。
OpenGL图像显示和别人不一样
用老师给的源代码,原封不动运行,图像异常 原本应该是这样的 ![原本的样子](https://img-ask.csdn.net/upload/201909/20/1568908959_14748.png) 然后我电脑上是这样子的 ![我运行出来的样子](https://img-ask.csdn.net/upload/201909/20/1568908978_338083.png) 下面附上main.cpp的代码 (第一次遇到这样的问题,百度谷歌弄了一下午,把VS2013卸载安装了2019,还是搞不定,求大神帮忙,感激不尽) ``` #include "Angel.h" #pragma comment(lib, "glew32.lib") const int MENU_CHOICE_WHITE = 0; const int MENU_CHOICE_BLACK = 1; const int MENU_CHOICE_RED = 2; const int MENU_CHOICE_GREEN = 3; const int MENU_CHOICE_BLUE = 4; const int MENU_CHOICE_YELLOW = 5; const int MENU_CHOICE_ORANGE = 6; const int MENU_CHOICE_PURPLE = 7; const vec3 WHITE(1.0, 1.0, 1.0); const vec3 BLACK(0.0, 0.0, 0.0); const vec3 RED(1.0, 0.0, 0.0); const vec3 GREEN(0.0, 1.0, 0.0); const vec3 BLUE(0.0, 0.0, 1.0); const vec3 YELLOW(1.0, 1.0, 0.0); const vec3 ORANGE(1.0, 0.65, 0.0); const vec3 PURPLE(0.8, 0.0, 0.8); // 主窗口变量 const int SQUARE_NUM = 6; const int SQUARE_NUM_POINTS = 4 * SQUARE_NUM; int mainWindow; int mainWindowMenu; int mainWindowSubmenu; int width = 600; // 主窗口宽度 int height = 600; // 主窗口高度 double offsetAngle = 0; // 角度偏移量 double delta = 0.05; // 每次改变角度偏移的变化量 vec3 mainWindowSquareColor = WHITE; // 子窗口变量 const int ELLIPSE_NUM_POINTS = 100; int subWindow; int subWindowMenu; vec3 subWindowObjectColor = RED; // 获得圆上的点 vec2 getEllipseVertex(vec2 center, double scale, double verticleScale, double angle) { vec2 vertex(sin(angle), cos(angle)); vertex += center; vertex *= scale; vertex.y *= verticleScale; // 修改垂直分量 return vertex; } // 生成圆上顶点的属性 void generateEllipsePoints(vec2 vertices[], vec3 colors[], vec3 color, int startVertexIndex, int numPoints, vec2 center, double scale, double verticalScale) { double angleIncrement = (2 * M_PI) / numPoints; double currentAngle = M_PI / 2; for (int i = startVertexIndex; i < startVertexIndex + numPoints; i++) { vertices[i] = getEllipseVertex(center, scale, verticalScale, currentAngle); colors[i] = color; currentAngle += angleIncrement; } } // 获得正方形的每个角度 double getSquareAngle(int point) { return (M_PI / 4 + (M_PI / 2 * point)) + offsetAngle; } // 生成正方形上顶点的属性 void generateSquarePoints(vec2 vertices[], vec3 colors[], int squareNum, int startVertexIndex) { double scale = 0.90; double scaleAdjust = scale / squareNum; vec2 center(0.0, -0.25); int vertexIndex = startVertexIndex; for (int i = 0; i < squareNum; i++) { vec3 currentColor = 0 == i % 2 ? mainWindowSquareColor : BLACK; for (int j = 0; j < 4; j++) { double currentAngle = getSquareAngle(j); vertices[vertexIndex] = vec2(sin(currentAngle), cos(currentAngle)) * scale + center; colors[vertexIndex] = currentColor; vertexIndex++; } scale -= scaleAdjust; } } // 空闲回调函数 void idleFunction() { // 改变角度的偏移量 offsetAngle += delta; // 标记主窗口重绘 glutPostWindowRedisplay(mainWindow); } void mainWindowInit() { vec2 vertices[SQUARE_NUM * 4]; vec3 colors[SQUARE_NUM * 4]; // 创建主窗口中多个正方形 generateSquarePoints(vertices, colors, SQUARE_NUM, 0); // 创建顶点数组对象 GLuint vao[1]; glGenVertexArrays(1, vao); glBindVertexArray(vao[0]); // 创建并初始化顶点缓存对象 GLuint buffer; glGenBuffers(1, &buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices) + sizeof(colors), NULL, GL_STATIC_DRAW); // 分别读取数据 glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertices), sizeof(colors), colors); // 读取着色器并使用 GLuint program = InitShader("vshader.glsl", "fshader.glsl"); glUseProgram(program); // 从顶点着色器中初始化顶点的位置 GLuint pLocation = glGetAttribLocation(program, "vPosition"); glEnableVertexAttribArray(pLocation); glVertexAttribPointer(pLocation, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); // 从片元着色器中初始化顶点的颜色 GLuint cLocation = glGetAttribLocation(program, "vColor"); glEnableVertexAttribArray(cLocation); glVertexAttribPointer(cLocation, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(sizeof(vertices))); // 黑色背景 glClearColor(0.0, 0.0, 0.0, 1.0); } // 菜单回调函数 void mainWindowMenuEvents(int menuChoice) { switch (menuChoice) { case MENU_CHOICE_WHITE: mainWindowSquareColor = WHITE; break; case MENU_CHOICE_BLACK: mainWindowSquareColor = BLACK; break; case MENU_CHOICE_RED: mainWindowSquareColor = RED; break; case MENU_CHOICE_GREEN: mainWindowSquareColor = GREEN; break; case MENU_CHOICE_BLUE: mainWindowSquareColor = BLUE; break; case MENU_CHOICE_YELLOW: mainWindowSquareColor = YELLOW; break; case MENU_CHOICE_ORANGE: mainWindowSquareColor = ORANGE; break; case MENU_CHOICE_PURPLE: mainWindowSquareColor = PURPLE; break; /*在此处添加控制旋转动画开始和停止的菜单选项*/ } // 标记mainWindow主窗口进行重绘 glutPostWindowRedisplay(mainWindow); } // 创建和设置主窗口菜单 void mainWindowSetupMenu() { // 创建子菜单,并注册菜单回调函数mainWindowMenuEvents mainWindowSubmenu = glutCreateMenu(mainWindowMenuEvents); glutAddMenuEntry("Yellow", MENU_CHOICE_YELLOW); glutAddMenuEntry("Orange", MENU_CHOICE_ORANGE); glutAddMenuEntry("Purple", MENU_CHOICE_PURPLE); glutAddMenuEntry("Black", MENU_CHOICE_BLACK); // 创建主菜单 mainWindowMenu = glutCreateMenu(mainWindowMenuEvents); glutAddMenuEntry("Red", MENU_CHOICE_RED); glutAddMenuEntry("Green", MENU_CHOICE_GREEN); glutAddMenuEntry("Blue", MENU_CHOICE_BLUE); glutAddMenuEntry("White", MENU_CHOICE_WHITE); // 在主菜单中添加子菜单 glutAddSubMenu("Other Square Colors", mainWindowSubmenu); // 关联鼠标右键激活菜单 glutAttachMenu(GLUT_RIGHT_BUTTON); } void mainWindowDisplay() { mainWindowInit(); // 重绘时写入新的颜色数据 glClear(GL_COLOR_BUFFER_BIT); for (int i = 0; i < SQUARE_NUM; i++) { glDrawArrays(GL_TRIANGLE_FAN, (i * 4), 4); } glutSwapBuffers(); } // 主窗口键盘回调函数 void mainWindowKeyboard(unsigned char key, int x, int y) { /*在此添加按下Esc按键退出的代码*/ } // 主窗口鼠标回调函数 void mainWindowMouse(int button, int state, int x, int y) { if (button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) { // 按下鼠标中键,指定当没有其他事件处理时,去调用idleFunction()这个函数 glutIdleFunc(idleFunction); } else if (button == GLUT_MIDDLE_BUTTON && state == GLUT_UP) { // 释放鼠标中键,解除调用 glutIdleFunc(NULL); } } void subWindowInit() { vec2 vertices[ELLIPSE_NUM_POINTS]; vec3 colors[ELLIPSE_NUM_POINTS]; // 创建子窗口中的椭圆 generateEllipsePoints(vertices, colors, subWindowObjectColor, 0, ELLIPSE_NUM_POINTS, vec2(0.0, 0.0), 0.7, 0.5); // 创建顶点数组对象 GLuint vao[1]; glGenVertexArrays(1, vao); glBindVertexArray(vao[0]); // 创建并初始化顶点缓存对象 GLuint buffer; glGenBuffers(1, &buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices) + sizeof(colors), NULL, GL_STATIC_DRAW); // 分别读取数据 glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertices), sizeof(colors), colors); // 读取着色器并复用 GLuint program = InitShader("vshader.glsl", "fshader.glsl"); glUseProgram(program); // 从顶点着色器中初始化顶点的位置 GLuint pLocation = glGetAttribLocation(program, "vPosition"); glEnableVertexAttribArray(pLocation); glVertexAttribPointer(pLocation, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); // 从片元着色器中初始化顶点的颜色 GLuint cLocation = glGetAttribLocation(program, "vColor"); glEnableVertexAttribArray(cLocation); glVertexAttribPointer(cLocation, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(sizeof(vertices))); // 设置子窗口背景颜色为白色 glClearColor(1.0, 1.0, 1.0, 1.0); } void subWindowDisplay() { subWindowInit(); // 重绘时写入新的颜色数据 glClear(GL_COLOR_BUFFER_BIT); glDrawArrays(GL_TRIANGLE_FAN, 0, ELLIPSE_NUM_POINTS); glutSwapBuffers(); } // 子窗口键盘回调函数 void subWindowKeyboard(unsigned char key, int x, int y) { switch (key) { case 'r': subWindowObjectColor = RED; break; case 'g': subWindowObjectColor = GREEN; break; case 'b': subWindowObjectColor = BLUE; break; case 'y': subWindowObjectColor = YELLOW; break; case 'o': subWindowObjectColor = ORANGE; break; case 'p': subWindowObjectColor = PURPLE; break; case 'w': subWindowObjectColor = WHITE; break; } // 标记subWindow子窗口进行重绘 glutPostWindowRedisplay(subWindow); } void printHelp() { printf("%s\n\n", "Interaction and Submenu"); printf("Keys to update the background color in sub window:\n"); printf("'r' - red\n'g' - green\n'b' - blue\n'y' - yellow\n'o' - orange\n'p' - purple\n'w' - white\n"); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); // 启用双重缓冲 glutInitWindowSize(width, height); mainWindow = glutCreateWindow("Interaction and Submenu"); glewExperimental = GL_TRUE; glewInit(); mainWindowInit(); mainWindowSetupMenu(); glutDisplayFunc(mainWindowDisplay); // 在主窗口中指定函数mainWindowMouse,在鼠标按下或释放时将会被调用 glutMouseFunc(mainWindowMouse); // 创建子窗口 subWindow = glutCreateSubWindow(mainWindow, 0, 0, width / 4, height / 4); subWindowInit(); glutDisplayFunc(subWindowDisplay); // 在子窗口中指定函数subWindowKeyboard,当一个能够生成ASCII字符的键释放时会被调用 glutKeyboardFunc(subWindowKeyboard); // 输出帮助信息 printHelp(); glutMainLoop(); return 0; } ```
opengl在VC2010中运行遇到的问题
在vc2010中配置了opengl的glew,glut,freeglut,gltools的库和头文件,用别人调试的代码怎么也跑不通,请问该如何解决 1> 正在对“Debug\OpenTest.unsuccessfulbuild”执行 Touch 任务。 1>ClCompile: 1> 所有输出均为最新。 1>ManifestResourceCompile: 1> 所有输出均为最新。 1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fprintf 已经在 gltools.lib(GLTools.obj) 中定义 1> 正在创建库 C:\Users\Administrator\Desktop\OpenTest\Debug\OpenTest.lib 和对象 C:\Users\Administrator\Desktop\OpenTest\Debug\OpenTest.exp 1>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library 1>gltools.lib(GLBatch.obj) : error LNK2019: 无法解析的外部符号 "void __cdecl operator delete(void *,unsigned int)" (??3@YAXPAXI@Z),该符号在函数 "public: virtual void * __thiscall GLBatch::`scalar deleting destructor'(unsigned int)" (??_GGLBatch@@UAEPAXI@Z) 中被引用 1>gltools.lib(GLTriangleBatch.obj) : error LNK2001: 无法解析的外部符号 "void __cdecl operator delete(void *,unsigned int)" (??3@YAXPAXI@Z) 1>gltools.lib(GLTools.obj) : error LNK2019: 无法解析的外部符号 ___report_rangecheckfailure,该符号在函数 "bool __cdecl gltLoadShaderFile(char const *,unsigned int)" (?gltLoadShaderFile@@YA_NPBDI@Z) 中被引用 1>gltools.lib(glew.obj) : error LNK2001: 无法解析的外部符号 ___report_rangecheckfailure 1>gltools.lib(GLTools.obj) : error LNK2019: 无法解析的外部符号 __imp____acrt_iob_func,该符号在函数 "bool __cdecl gltCheckErrors(unsigned int)" (?gltCheckErrors@@YA_NI@Z) 中被引用 1>gltools.lib(GLTools.obj) : error LNK2019: 无法解析的外部符号 __imp____stdio_common_vfprintf,该符号在函数 __vfprintf_l 中被引用 1>C:\Users\Administrator\Desktop\OpenTest\Debug\OpenTest.exe : fatal error LNK1120: 4 个无法解析的外部命令 1> 1>生成失败。 1> 1>已用时间 00:00:05.07 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
Opengl中ProcessMouseScroll(GLfloat yOffset)函数不起作用
鼠标滚轮不起作用,不会报错,不知道是怎么回事 主函数如下: ``` #include <iostream> #define GLEW_STATIC #include <GL/glew.h> #include <GLFW/glfw3.h> #include "Shader.h" #include "Camera.h" #include "Light.h" #include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> #include <glm/gtc/matrix_transform.hpp> #include <glm/gtx/rotate_vector.hpp> void KeyCallback(GLFWwindow *window, int key, int scancode, int action, int mode); void MouseCallback(GLFWwindow *window, double xPos, double yPos); void ScrollCallback(GLFWwindow *window, double xOffset, double yOffset); void DoMovement(); bool keys[1024]; const GLint WIDTH = 800, HEIGHT = 600; Camera camera(glm::vec3(0.0f, 0.0f, 2.0f)); GLfloat deltaTime = 0.0f; GLfloat lastTime = 0.0f; GLfloat lastX = WIDTH / 2; GLfloat lastY = HEIGHT / 2; bool firstMouse = true; glm::vec3 lightPos = glm::vec3(0.0f, 0.0f, 0.0f); int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); GLFWwindow * window = glfwCreateWindow(WIDTH, HEIGHT, "w11", nullptr, nullptr); if (nullptr == window) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); glfwSetKeyCallback(window, KeyCallback); glfwSetCursorPosCallback(window, MouseCallback); glfwSetScrollCallback(window, ScrollCallback); glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); int screenWidth, screenHeight; glfwGetFramebufferSize(window, &screenWidth, &screenHeight); glewExperimental = GL_TRUE; if (GLEW_OK != glewInit()) { std::cout << "Failed to initialise GLEW" << std::endl; glfwTerminate(); return -1; } Shader lightShader = Shader("res/shaders/light.vs", "res/shaders/light.frag"); Light lightModel = Light(); Shader shader = Shader("res/shaders/core.vs", "res/shaders/core.frag"); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); GLfloat vertices[] = { -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, -0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, -0.5f, 0.5f, -0.5f, -1.0f, 0.0f, 0.0f, -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, -0.5f, -0.5f, 0.5f, -1.0f, 0.0f, 0.0f, -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, -0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, -0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, -0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f }; GLuint VAO, VBO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); // transfer the data glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // set the attribute glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid *)0); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid *)(3 * sizeof(GLfloat))); glEnableVertexAttribArray(1); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); glm::mat4 view = glm::mat4(1.0f); //glm::mat4 projection = glm::perspective(glm::radians(camera.GetZoom()), static_cast<GLfloat>(screenWidth) / static_cast<GLfloat>(screenHeight), 0.1f, 1000.0f); glm::mat4 projection = glm::perspective(camera.GetZoom(), (float)screenWidth / (float)screenHeight, 0.1f, 100.0f); while (!glfwWindowShouldClose(window)) { GLfloat currentTime = glfwGetTime(); deltaTime = currentTime - lastTime; lastTime = currentTime; glfwPollEvents(); DoMovement(); glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, screenWidth, screenHeight); view = camera.GetViewMatrix(); glm::mat4 transform = glm::mat4(1.0f); lightShader.Use(); lightPos = glm::vec3(20.0f, 0.0f, 0.0f); lightPos = glm::rotate(lightPos, glm::radians(20.0f)*static_cast<GLfloat>(glfwGetTime()), glm::vec3(1.0f, 1.0f, 1.0f)); transform = glm::scale(transform, glm::vec3(0.1f, 0.1f, 0.1f)); transform = glm::translate(transform, lightPos); glUniformMatrix4fv(glGetUniformLocation(lightShader.Program, "model"), 1, GL_FALSE, glm::value_ptr(transform)); glUniformMatrix4fv(glGetUniformLocation(lightShader.Program, "view"), 1, GL_FALSE, glm::value_ptr(view)); glUniformMatrix4fv(glGetUniformLocation(lightShader.Program, "projection"), 1, GL_FALSE, glm::value_ptr(projection)); lightModel.Draw(lightShader); shader.Use(); transform = glm::mat4(1.0f); transform = glm::scale(transform, glm::vec3(0.4f, 0.4f, 0.4f)); GLuint transLoc = glGetUniformLocation(shader.Program, "model"); glUniformMatrix4fv(transLoc, 1, GL_FALSE, glm::value_ptr(transform)); GLuint viewLoc = glGetUniformLocation(shader.Program, "view"); glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view)); GLuint projLoc = glGetUniformLocation(shader.Program, "projection"); glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection)); glUniform3f(glGetUniformLocation(shader.Program, "LightPos"), lightPos.x, lightPos.y, lightPos.z); glUniform3f(glGetUniformLocation(shader.Program, "ViewPos"), camera.GetPosition().x, camera.GetPosition().y, camera.GetPosition().z); glUniform1f(glGetUniformLocation(shader.Program, "p"), 64.0f); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 36); glBindVertexArray(0); glfwSwapBuffers(window); } glfwTerminate(); return 0; } void KeyCallback(GLFWwindow *window, int key, int scancode, int action, int mode) { if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) { glfwSetWindowShouldClose(window, GL_TRUE); } if (key >= 0 & key < 1024) { if (action == GLFW_PRESS) { keys[key] = true; } else if (action == GLFW_RELEASE) { keys[key] = false; } } } void DoMovement() { if (keys[GLFW_KEY_W] || keys[GLFW_KEY_UP]) { camera.ProcessKeyboard(FORWARD, deltaTime); } if (keys[GLFW_KEY_S] || keys[GLFW_KEY_DOWN]) { camera.ProcessKeyboard(BACKWARD, deltaTime); } if (keys[GLFW_KEY_A] || keys[GLFW_KEY_LEFT]) { camera.ProcessKeyboard(LEFT, deltaTime); } if (keys[GLFW_KEY_D] || keys[GLFW_KEY_RIGHT]) { camera.ProcessKeyboard(RIGHT, deltaTime); } } void MouseCallback(GLFWwindow *window, double xPos, double yPos) { if (firstMouse) { lastX = xPos; lastY = yPos; firstMouse = false; } GLfloat xOffset = xPos - lastX; GLfloat yOffset = yPos - lastY; lastX = xPos; lastY = yPos; camera.ProcessMouseMovement(xOffset, yOffset); } void ScrollCallback(GLFWwindow* window, double xOffset, double yOffset) { camera.ProcessMouseScroll(yOffset); } ``` Camera.h如下: ``` #pragma once #define GLEW_STATIC #include <GL/glew.h> #include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp> #include <vector> enum Camera_Movement { FORWARD, BACKWARD, LEFT, RIGHT }; const GLfloat YAW = -90.0f; const GLfloat PITCH = 0.0f; const GLfloat SPEED = 6.0f; const GLfloat SENSITIVITY = 0.25f; const GLfloat ZOOM = 45.0f; class Camera { public: Camera(glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f), GLfloat yaw = YAW, GLfloat pitch = PITCH) :front(glm::vec3(0.0f, 0.0f, -1.0f)), movementSpeed(SPEED), mouseSensitivity(SENSITIVITY), zoom(ZOOM) { this->position = position; this->worldUp = up; this->yaw = yaw; this->pitch = pitch; this->updateCameraVectors(); } Camera(GLfloat posX, GLfloat posY, GLfloat posZ, GLfloat upX, GLfloat upY, GLfloat upZ, GLfloat yaw = YAW, GLfloat pitch = PITCH) :front(glm::vec3(0.0f, 0.0f, -1.0f)), movementSpeed(SPEED), mouseSensitivity(SENSITIVITY), zoom(ZOOM) { this->position = glm::vec3(posX, posY, posZ); this->worldUp = glm::vec3(upX, upY, upZ); this->yaw = yaw; this->pitch = pitch; this->updateCameraVectors(); } void ProcessKeyboard(Camera_Movement direction, GLfloat deltaTime) { GLfloat velocity = this->movementSpeed * deltaTime; if (direction == FORWARD) { this->position += this->front * velocity; } if (direction == BACKWARD) { this->position -= this->front * velocity; } if (direction == LEFT) { this->position -= this->right * velocity; } if (direction == RIGHT) { this->position += this->right * velocity; } } void ProcessMouseMovement(GLfloat xOffset, GLfloat yOffset, GLboolean constrainPitch = true) { xOffset *= this->mouseSensitivity; yOffset *= this->mouseSensitivity; this->yaw += xOffset; this->pitch -= yOffset; if (constrainPitch) { if (this->pitch > 89.0f) { this->pitch = 89.0f; } if (this->pitch < -89.0f) { this->pitch = -89.0f; } } updateCameraVectors(); } glm::mat4 GetViewMatrix() { return glm::lookAt(this->position, this->position + this->front, this->up); } void ProcessMouseScroll(GLfloat yOffset) { if (this->zoom >= 1.0f && this->zoom <= 45.0f) { this->zoom -= yOffset ; } if (this->zoom <= 1.0f) { this->zoom = 1.0f; } if (this->zoom >= 45.0f) { this->zoom = 45.0f; } } GLfloat GetZoom() { return this->zoom; } glm::vec3 GetPosition() { return this->position; } private: glm::vec3 position; glm::vec3 front; glm::vec3 up; glm::vec3 right; glm::vec3 worldUp; GLfloat yaw; GLfloat pitch; GLfloat movementSpeed; GLfloat mouseSensitivity; GLfloat zoom; void updateCameraVectors() { glm::vec3 front; front.x = cos(glm::radians(this->pitch))*cos(glm::radians(this->yaw)); front.y = sin(glm::radians(this->pitch)); front.z = cos(glm::radians(this->pitch))*sin(glm::radians(this->yaw)); this->front = glm::normalize(front); this->right = glm::normalize(glm::cross(this->front, this->worldUp)); this->up = glm::normalize(glm::cross(this->right, this->front)); } }; ``` 求大佬讲解
用VS2013编译opengl编程宝典第五版的第一个画三角形的例子,编译后程序运行不了
![![![图片说明](https://img-ask.csdn.net/upload/201602/05/1454665400_904503.png)图片说明](https://img-ask.csdn.net/upload/201602/05/1454665388_987111.png)图片说明](https://img-ask.csdn.net/upload/201602/05/1454665377_645669.png) 代码如下: #include<Gltools.h> #include<GLShadermanager.h> #define FERRGLUT_STATIC #include<gl/glut.h> #include<gl/glew.h> GLBatch trianglebatch; GLShaderManager shadermanager; int main(int argc, char* argv[]) { void RenderScene(); void ChangeSize(int w, int h); void SetupRC(); gltSetWorkingDirectory(argv[0]); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600); glutCreateWindow("triangle"); glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); GLenum err = glewInit(); if (GLEW_OK != err){ fprintf(stderr, "GLEW Error:%s\n", glewGetErrorString(err)); return 1; } SetupRC(); glutMainLoop(); return 0; } void ChangeSize(int w, int h) { glViewport(0, 0, w, h); } void SetupRC() { glClearColor(0.0f, 0.0f, 1.0f, 1.0f); shadermanager.InitializeStockShaders(); GLfloat vVerts[9] = { -0.5f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f }; trianglebatch.Begin(GL_TRIANGLES, 3); trianglebatch.CopyVertexData3f(vVerts); trianglebatch.End(); } void RenderScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); GLfloat vRed[3] = { 1.0f, 0.0f, 0.0f }; shadermanager.UseStockShader(GLT_SHADER_IDENTITY, vRed); trianglebatch.Draw(); glutSwapBuffers(); } 网上看说有“0xC0000005: 写入位置 0x000000AC 时发生访问冲突”这种问题是指针没有赋值,可是我是按照例子敲的代码啊。求大神解答。
我将自己编写的opengl代码编写成了dll文件,但是我测试的时候,却是闪退,不知道什么原因
#include<glew.h> #include <glut.h> #include <stdio.h> #include <string.h> #include <sstream> #include <windows.h> #include<stdlib.h> using namespace std; int main(int argc, char *argv[]) { typedef void (*Fun)(); HINSTANCE opengl = LoadLibrary("opengldll721.dll");//载入dll文件   if(opengl == NULL) { return 1; } Fun Display1=(Fun)GetProcAddress(opengl, "Display"); Fun Initial1 = (Fun)GetProcAddress(opengl, "Initial"); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); //glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(800, 500); glutInitWindowPosition(300, 300); glutCreateWindow("Scatter Plot"); glutDisplayFunc(Display1); Initial1(); glFlush(); //glutTimerFunc(330, timerProc, 1); return 0; }
OpenGL 用三角形扇绘制圆 报错GLUT Fatal Error: pixel format with necessary capabilities not
#include<GLTools.h> #include<GLShaderManager.h> #include<GL/glut.h> int g_width = 800; int g_height = 600; int nStep = 200; const GLfloat a = 0.6f, b = 0.3f; const GLfloat Pi = 3.1415926536f; GLShaderManager shaderManager; GLBatch pointBatch; GLBatch lineBatch; GLBatch lineStripBatch; GLBatch lineLoopBatch; GLBatch triangleBatch; GLBatch triangleStripBatch; GLBatch triangleFanBatch; void initialize(); void uninitialize(); void display_func(void); void reshape_func(int w, int h); void key_func(unsigned char key, int x, int y); void idle_func(); void initialize() { glClearColor(0.0, 0.0, 0.0, 1.0); glClearDepth(1.0); shaderManager.InitializeStockShaders(); GLfloat vCoast[24][3] = { {2.80,1.20,0.0},{2.0,1.20,0.0}, {2.0,1.08,0.0},{2.0,1.08,0.0}, {0.0,0.80,0.0},{-.40,0.40,0.0}, {-.48,0.2,0.0},{-.40,0.0,0.0}, {-.60,-.40,0.0},{-.80,-.80,0.0}, {-.80,-1.4,0.0},{-.40,-1.60,0.0}, {0.0,-1.20,0.0},{.2,-.80,0.0}, {.48,-.40,0.0},{.2,-.80,0.0}, {.48,.20,0.0},{.80,.40,0.0}, {1.20,.80,0.0},{1.60,.60,0.0}, {2.0,.60,0.0},{2.2,.80,0.0}, {2.40,1.0,0.0},{2.80,1.0,0.0} }; for (int i = 0; i < 24; i++) { vCoast[i][0] *= 0.3; vCoast[i][1] *= 0.3; vCoast[i][2] *= 0.3; } //Load point batch pointBatch.Begin(GL_POINT, 24); pointBatch.CopyVertexData3f(vCoast); pointBatch.End(); //Load as a bunch of line segments lineBatch.Begin(GL_LINES, 24); lineBatch.CopyVertexData3f(vCoast); lineBatch.End(); //Load as a single line segment lineStripBatch.Begin(GL_LINE_STRIP, 24); lineStripBatch.CopyVertexData3f(vCoast); lineStripBatch.End(); //Single line,connect first and last points lineLoopBatch.Begin(GL_LINE_LOOP, 24); lineLoopBatch.CopyVertexData3f(vCoast); lineLoopBatch.End(); GLfloat vPyramid[16][3] = {0}; float angle = 0; int i = 0; for (; angle < (2.0f*Pi)&&i<16; angle += (Pi / 8.0f),i++) { int x = 50.0f*sin(angle); int y = 50.f*cos(angle); vPyramid[i][1] = x; vPyramid[i][2] = y; vPyramid[i][3] = 0.0f; } //Load as a triangle fan triangleFanBatch.Begin(GL_TRIANGLE_FAN,16); triangleFanBatch.CopyVertexData3f(vPyramid); triangleFanBatch.End(); } void display_func(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSwapBuffers(); } void idle_func() { glutPostRedisplay(); } void reshape_func(int w, int h) { glViewport(0, 0, w, h); } void key_func(unsigned char key, int x, int y) { switch (key) { case 49: case 50: glLineWidth(2.0f); lineStripBatch.Draw(); glLineWidth(1.0f); break; case 51: glLineWidth(2.0f); lineLoopBatch.Draw(); glLineWidth(1.0f); break; case 52: glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); triangleBatch.Draw(); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); break; case 53: glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); triangleFanBatch.Draw(); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); break; case 54: glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); triangleStripBatch.Draw(); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); break; } } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitWindowSize(g_width, g_height); glutInitDisplayMode(GLUT_DEPTH || GLUT_DOUBLE || GLUT_RGB); glutCreateWindow("MyShapes"); initialize(); GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW Error: $s\n", glewGetErrorString(err)); return 1; } glutDisplayFunc(display_func); glutReshapeFunc(reshape_func); glutKeyboardFunc(key_func); glutIdleFunc(idle_func); glutMainLoop(); return 0; }
请问如何将OpenGL中的纹理单元传递给片段着色器???
小白我最近在学习GLSL,绝对的菜鸟级别啊~ 今天遇到了一个问题,我用 *texture[1]* 在程序中存储了一个纹理,然后使用了下面两行代码将纹理传递给片段着色器,程序是可以运行的 *texUnitLoc = glGetUniformLocation(p, "tex"); glUniform1i(texUnitLoc, 0);* 但是当我在程序中存储两个纹理以后,想要将两个纹理都传递到着色器时,应该怎么办啊??将上面代码中的‘0’换做‘texture[0]’也不管用啊,什么都不管用啊,glUniform究竟是怎么一回事啊?求大神指点~~T_T 附代码如下: #include <stdio.h> #include <stdlib.h> #include <GL/glew.h> #include <GL/glut.h> #include <glaux.h> #include "textfile.h" #include "printInfoLog.h" GLfloat LightAmbient0[]= {1, 1, 1, 1.0f }; GLfloat LightDiffuse0[]= {1.0f, 1.0f, 1.0f, 1.0f }; GLfloat LightSpecular0[]={1.0f, 1.0f, 1.0f, 1.0f}; GLfloat LightPosition0[]= {3.0f, 3.0f, 3.0f, 0.0f }; GLfloat MaterialAmbient[] = {0.3, 0.3, 0.3, 1.0f}; GLfloat MaterialDiffuse[] = {0.7, 0.7, 0.7, 1.0f}; GLfloat MaterialSpecular[] ={0.3, 0.3, 0.3, 1.0f}; GLfloat MaterialSe = 64.0f; GLUquadricObj *quadratic; GLuint texture[2]; // 存储一个纹理 GLint texUnitLoc,l3dUnitLoc; float a = 0.0f; GLuint v,f,p; float t = 0; GLint loc; AUX_RGBImageRec *LoadBMP(char *Filename) // 载入位图图象 { FILE *File=NULL; // 文件句柄 if (!Filename) // 确保文件名已提供 { return NULL; // 如果没提供,返回 NULL } File=fopen(Filename,"r"); // 尝试打开文件 if (File) // 文件存在么? { fclose(File); // 关闭句柄 return auxDIBImageLoad(Filename);// 载入位图并返回指针 } return NULL; // 如果载入失败,返回 NULL } int LoadGLTextures() // 载入位图(调用上面的代码)并转换成纹理 { int Status=FALSE; // 状态指示器 AUX_RGBImageRec *TextureImage[2]; // 创建纹理的存储空间 memset(TextureImage,0,sizeof(void *)*1); // 将指针设为 NULL // 载入位图,检查有无错误,如果位图没找到则退出 if (TextureImage[0]=LoadBMP("Data/Crate.bmp")) { Status=TRUE; // 将 Status 设为 TRUE glGenTextures(1, &texture[0]); // 创建纹理 // 创建 MipMapped 纹理 glBindTexture(GL_TEXTURE_2D, texture[0]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); } if (TextureImage[0]) // 纹理是否存在 { if (TextureImage[0]->data) // 纹理图像是否存在 { free(TextureImage[0]->data); // 释放纹理图像占用的内存 } free(TextureImage[0]); // 释放图像结构 } if (TextureImage[1]=LoadBMP("Data/1.bmp")) { Status=TRUE; // 将 Status 设为 TRUE glGenTextures(1, &texture[1]); // 创建纹理 // 创建 MipMapped 纹理 glBindTexture(GL_TEXTURE_2D, texture[1]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[1]->data); } if (TextureImage[1]) // 纹理是否存在 { if (TextureImage[1]->data) // 纹理图像是否存在 { free(TextureImage[1]->data); // 释放纹理图像占用的内存 } free(TextureImage[1]); // 释放图像结构 } return Status; // 返回 Status } void changeSize(int w, int h) { float ratio = 1.0* w / h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, w, h); gluPerspective(45,ratio,1,100); glMatrixMode(GL_MODELVIEW); } void init() { glEnable(GL_DEPTH_TEST); glClearColor(0.0,0.0,0.0,0.0); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient0); glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse0); glLightfv(GL_LIGHT0,GL_SPECULAR, LightSpecular0); glLightfv(GL_LIGHT0, GL_POSITION, LightPosition0); glEnable(GL_LIGHT0); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, MaterialAmbient); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialDiffuse); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR, MaterialSpecular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS, MaterialSe); quadratic=gluNewQuadric(); gluQuadricNormals(quadratic, GLU_SMOOTH); gluQuadricTexture(quadratic, GL_TRUE); LoadGLTextures(); // 调用纹理载入子例程 glEnable(GL_TEXTURE_2D); // 启用纹理映射 } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0, 0.0f,1.0f,0.0f); a += 0.35f; if(a > 360) a -= 360.0f; glRotatef(a, 0, 1, 0); glRotatef(0, 1, 0, 0); //glBindTexture(GL_TEXTURE_2D, texture[0]); gluSphere(quadratic, 1, 32, 16); t+=0.01; glutPostRedisplay(); glutSwapBuffers(); } int main(int argc, char **argv) { void setShaders(); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutCreateWindow("GLSL DEMO"); init(); glutDisplayFunc(renderScene); glutReshapeFunc(changeSize); glewInit(); if (glewIsSupported("GL_VERSION_2_0")) printf("Ready for OpenGL 2.0\n"); else { printf("OpenGL 2.0 not supported\n"); exit(1); } setShaders(); texUnitLoc = glGetUniformLocation(p, "tex"); glUniform1i(texUnitLoc, 0); //l3dUnitLoc = glGetUniformLocation(p, "l3d"); //glUniform1i(l3dUnitLoc, texture[1]); glutMainLoop(); return 0; } void setShaders() { char *vs = NULL,*fs = NULL,*fs2 = NULL; v = glCreateShader(GL_VERTEX_SHADER); f = glCreateShader(GL_FRAGMENT_SHADER); vs = textFileRead("vs.txt"); fs = textFileRead("fs.txt"); const char * vv = vs; const char * ff = fs; glShaderSource(v, 1, &vv,NULL); glShaderSource(f, 1, &ff,NULL); free(vs);free(fs); glCompileShader(v); glCompileShader(f); printShaderInfoLog(v); printShaderInfoLog(f); p = glCreateProgram(); glAttachShader(p,v); glAttachShader(p,f); glLinkProgram(p); printProgramInfoLog(p); glUseProgram(p); //将p改为0表示使用固定的管线 }
CMakeLists编译出错,如何使用?
cmake_minimum_required(VERSION 2.8 FATAL_ERROR) project(kinect_capture) set(FREENECT_DIR "c:/code/libfreenect") set(FREENECT_BUILD_DIR "c:/code/libfreenect_build") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${FREENECT_DIR}/cmake_modules/") #Boost set(BOOST_ROOT "c:/code/boost_1_47_0") set(BOOST_LIBRARYDIR "C:/code/boost_1_47_0/stage/lib") set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost COMPONENTS date_time) include_directories(${Boost_INCLUDE_DIRS}) link_directories(${BOOST_LIBRARYDIR}) #VTK #find_package(VTK) #if(VTK_FOUND) # INCLUDE(${VTK_USE_FILE}) #endif() f #PCL #find_package(PCL 1.1 COMPONENTS common visualization) #include_directories(${PCL_INCLUDE_DIRS}) #link_directories(${PCL_LIBRARY_DIRS}) #add_definitions(${PCL_DEFINITIONS}) #OpenCV set(OpenCV_DIR "C:/code/OpenCV2.2/build") find_package(OpenCV COMPONENTS filesystem) include_directories(${OpenCV_INCLUDE_DIRS}) link_directories(${OpenCV_LIB_DIR}) #OpenGL find_package(OpenGL REQUIRED) find_package(GLUT REQUIRED) include_directories(${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} ${USB_INCLUDE_DIRS}) #include_directories("C:/code/glew-1.7.0/include") #include_directories("C:/code/glew-1.7.0/lib") #Glui include_directories("C:/code/glui-2.35/src/include") link_directories("c:/code/glui-2.35/src/msvc/lib") #PTHREAD set(THREADS_PTHREADS_INCLUDE_DIR "c:/code/pthreads-2-8-0/include") set(THREADS_PTHREADS_WIN32_LIBRARY "c:/code/pthreads-2-8-0/lib/pthreadVC2.lib") set(THREADS_USE_PTHREADS_WIN32 true) find_package(Threads REQUIRED) include_directories(${THREADS_PTHREADS_INCLUDE_DIR}) #USB set(LIBUSB_1_INCLUDE_DIR "C:/code/libusb-1.2.5.0/include") set(LIBUSB_1_LIBRARY "C:/code/libusb-1.2.5.0/lib/msvc/libusb.lib") find_package(libusb-1.0 REQUIRED) include_directories(${LIBUSB_1_INCLUDE_DIRS}) include_directories("${FREENECT_DIR}/platform/windows") include_directories("${FREENECT_DIR}/platform/windows/libusb10emu") #Freenect include_directories("${FREENECT_DIR}/include") #set(FREENECT_LIBRARY_DIR optimized "${FREENECT_BUILD_DIR}/lib/Release/" debug "${FREENECT_BUILD_DIR}/lib/Debug/") set(FREENECT_LIBRARY_DIR "${FREENECT_BUILD_DIR}/lib/") link_directories(${FREENECT_LIBRARY_DIR}) set(FREENECT_LIBRARIES "freenect.lib") #Files file(GLOB_RECURSE INCS "*.h") set(SRCS kinect_capture.cpp kinect_capture_app.cpp kinect_calibration.cpp freenect_module.cpp ) #Build add_executable (kinect_capture ${SRCS} ${INCS}) target_link_libraries (kinect_capture ${FREENECT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ${LIBUSB_1_LIBRARIES} ${OpenCV_LIBS} ${Boost_LIBRARIES}) #${PCL_LIBRARIES} ${VTK_LIBRARIES} 这是cmakelist的全部内容,#Boost,#VTK,#PCL,#OpenCV,#OpenGL,#Glui,#PTHREAD,#Freenect这些在电脑里都要有吗??
0x0001af3a 处有未经处理的异常: 0xC0000005: Access violation
opengl程序在自己的电脑vs2010上面运行出错,在别人电脑没问题,重新配置了n次glew都不行,每次都弹出:0x0001af3a 处有未经处理的异常: 0xC0000005: Access violation,并且自动打开gs_support.c跳到 cookie = systime.ft_struct.dwLowDateTime;!![CSDN移动问答][1] [1]: http://zhidao.baidu.com/question/936332428647718532.html?quesup2&oldq=1
opengl VBO(vertex buffer object), 在线等
初学opengl,代码如下,不知哪里出了问题,没有办法显示正方体,一片空白。 // myFirstOpengl.cpp : Defines the entry point for the console application. #include "stdafx.h" #include <GLTools.h> #define FREEGLUT_STATIC #include <GL/glut.h> #include <GLFrustum.h> #include <GLShaderManager.h> extern GLfloat vertexData[8][3]; //顶点数据指针 extern GLubyte colorData[8][4]; //颜色指针 extern GLuint indexData[12][3]; //索引指针 GLuint BufferName[3]; //顶点缓存和索引缓存的数组id GLFrustum viewFrustum; GLShaderManager shaderManager; void SetupRC() { //glClearColor(0.0f, 0.0f, 0.75f, 1.0f); //设置背景颜色 glEnable(GL_DEPTH_TEST); printf("setupRc"); shaderManager.InitializeStockShaders(); } void ShutdownRC() { glGenBuffers(3, BufferName); glBindBuffer(GL_ARRAY_BUFFER, BufferName[0]); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, BufferName[1]); glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[2]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW); } void ChangeSize(int w, int h) { printf("changesize"); if(h == 0) h = 1; glViewport(0, 0, w, h); // set viewport to window dimensions viewFrustum.SetPerspective(35.0f, float(w)/float(h), 1.0f, 1000.0f); //angle, w/h, near, far } void SpecialKeys(int key, int x, int y) { } void RenderScene() { printf("render"); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glBindBuffer(GL_ARRAY_BUFFER, BufferName[0]); //glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW); glVertexPointer(3, GL_FLOAT, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, BufferName[1]); //glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW); glColorPointer(4, GL_FLOAT, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[2]); //glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); //glDisableClientState(GL_VERTEX_ARRAY); } int main(int argc, char* argv[]) { gltSetWorkingDirectory(argv[0]); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA |GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600); glutCreateWindow("My first Opengl Example"); glutReshapeFunc(ChangeSize);//原型函数 glutSpecialFunc(SpecialKeys);//原型函数 glutDisplayFunc(RenderScene); GLenum err = glewInit(); if(GLEW_OK != err) { fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); return 1; } SetupRC(); glutMainLoop(); ShutdownRC(); return 0; }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
五年程序员记流水账式的自白。
不知觉已中码龄已突破五年,一路走来从起初铁憨憨到现在的十九线程序员,一路成长,虽然不能成为高工,但是也能挡下一面,从15年很火的android开始入坑,走过java、.Net、QT,目前仍处于android和.net交替开发中。 毕业到现在一共就职过两家公司,目前是第二家,公司算是半个创业公司,所以基本上都会身兼多职。比如不光要写代码,还要写软著、软著评测、线上线下客户对接需求收集...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
一文详尽系列之模型评估指标
点击上方“Datawhale”,选择“星标”公众号第一时间获取价值内容在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标,针对不同机器学习问题如回归、分类、排...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
程序员该看的几部电影
1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?如何...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!!
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。 VSCode 版本的插件,目前能做到什么? 安装插件之后,开发者可以立即体验...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
2019年除夕夜的有感而发
天气:小雨(加小雪) 温度:3摄氏度 空气:严重污染(399) 风向:北风 风力:微风 现在是除夕夜晚上十点钟,再有两个小时就要新的一年了; 首先要说的是我没患病,至少现在是没有患病;但是心情确像患了病一样沉重; 现在这个时刻应该大部分家庭都在看春晚吧,或许一家人团团圆圆的坐在一起,或许因为某些特殊原因而不能团圆;但不管是身在何处,身处什么境地,我都想对每一个人说一句:新年快乐! 不知道csdn这...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了掌握好Android打下基础。
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问