1. 程式人生 > >OpenGL在vs2015上的配置(藍寶書win10)

OpenGL在vs2015上的配置(藍寶書win10)

OpenGL在VS2015上的配置(GLToolS,freeglut)—以藍寶書第五版為例

1、下載藍寶書配套的完整原始碼。

2、新增第一個例項程式碼,例如triangle。新建win32控制檯程式空專案

3、新增庫目錄和包含目錄以及附加依賴項gltools.lib和free_static.lib。或者直接右鍵專案新增現有項gltools.lib和free_static.lib。

4、編譯執行會發生錯誤,比如這樣:

triangle.cpp
1>LINK : warning LNK4098: 預設庫“LIBCMT”與其他庫的使用衝突;請使用 /NODEFAULTLIB:library
1>freeglut_static.lib(freeglut_init.obj) : error LNK2019: 無法解析的外部符號 _sscanf,該符號在函式 _glutInit 中被引用
1>freeglut_static.lib(freeglut_main.obj) : error LNK2019: 無法解析的外部符號 _vfprintf,該符號在函式 _fgError 中被引用
1>freeglut_static.lib(freeglut_main.obj) : error LNK2019: 無法解析的外部符號 ___iob_func,該符號在函式 _fgError 中被引用
1>freeglut_static.lib(freeglut_display.obj) : error LNK2001: 無法解析的外部符號 ___iob_func
1>gltools.lib(GLTools.obj) : error LNK2001: 無法解析的外部符號 ___iob_func
1>freeglut_static.lib(freeglut_joystick.obj) : error LNK2019: 無法解析的外部符號 __snprintf,該符號在函式 _fghJoystickGetOEMProductName 中被引用

5、解決方法:

a、在程式碼前面新增:

#pragma comment(lib,"legacy_stdio_definitions.lib")

編譯後可能是這樣:
1> triangle.cpp
1>LINK : warning LNK4098: 預設庫“LIBCMT”與其他庫的使用衝突;請使用 /NODEFAULTLIB:library
1>freeglut_static.lib(freeglut_main.obj) : error LNK2019: 無法解析的外部符號 ___iob_func,該符號在函式 _fgError 中被引用
1>freeglut_static.lib(freeglut_display.obj) : error LNK2001: 無法解析的外部符號 ___iob_func
1>gltools.lib(GLTools.obj) : error LNK2001: 無法解析的外部符號 ___iob_func

b、接著新增:

#include<stdio.h>
#ifdef __cplusplus
extern"C"
#endif 
FILE __iob_func[3] = { __acrt_iob_func(0),__acrt_iob_func(2),__acrt_iob_func(3) };

c、編譯通過,執行完美,大功告成!!!

6、下面是所有程式碼以及結果

a、程式碼:

// Triangle.cpp
// Our first OpenGL program that will just draw a triangle on the screen.
 #pragma comment(lib,"legacy_stdio_definitions.lib")

 #include<stdio.h>
 #ifdef __cplusplus
  extern"C"
 #endif // 
 FILE __iob_func[3] = { __acrt_iob_func(0),__acrt_iob_func    (2),__acrt_iob_func(3) };
#include <GLTools.h>            // OpenGL toolkit
#include <GLShaderManager.h>    // Shader Manager Class
#ifdef __APPLE__
#include <glut/glut.h>          // OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>            // Windows FreeGlut equivalent
#endif

GLBatch triangleBatch;
GLShaderManager shaderManager;

    ///////////////////////////////////////////////////////////////////////////////
    // Window has changed size, or has just been created. In either case, we need
    // to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
    glViewport(0, 0, w, h);
}


    ///////////////////////////////////////////////////////////////////////////////
    // This function does any needed initialization on the rendering context. 
    // This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
    // Blue background
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);

    shaderManager.InitializeStockShaders();

    // Load up a triangle
    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();
}



    ///////////////////////////////////////////////////////////////////////////////
// Called to draw scene
void RenderScene(void)
{
    // Clear the window with current clearing color
        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();

    // Perform the buffer swap to display back buffer
    glutSwapBuffers();
}


    ///////////////////////////////////////////////////////////////////////////////
// Main entry point for GLUT based programs
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;
}

b、結果

這裡寫圖片描述

不足之處,多多見諒,謝謝

相關推薦

OpenGL在vs2015配置win10

OpenGL在VS2015上的配置(GLToolS,freeglut)—以藍寶書第五版為例 1、下載藍寶書配套的完整原始碼。 2、新增第一個例項程式碼,例如triangle。新建win32控制檯程式空專案 3、新增庫目錄和包含目錄以及附加依賴項

OpenGL第七章:立體天空和紋理折射、雙紋理

ever oot 可行性 VR char 都是 pipeline 差異 pac 對照了藍寶書,才知道紅寶書的長處。 reflect函數的原理在紅寶書中有說明,僅僅有

OpenGL第五版,VS2012環境配置,親測可用。

下載OpenGL所需的包,並解壓好。連結http://download.csdn.net/download/ewtab/10241388 1、配置freeglut 將freeglut——include——GL裡面的三個.h檔案(除了glut.h)複製到vs2012安裝目錄

win10下的iis的配置服務於asp.net

win10下的iis的配置和win7下的是類似的。 1.右鍵開始,開啟控制面板,進入解除安裝程式中,勾上如下圖所示的專案,即可裝上iis。 2.重啟後搜尋iis,進入iis配置中。點選網站,右鍵新建網站,填入網站名稱。 這裡是個關鍵,應用池要改

opengl學習筆記1_3D圖形技術和術語介紹

1將數學和圖形資料轉換成3D空間影象的操作叫做渲染(Rending) 渲染過程中出現的其他一些屬性和操作: 1.1變換(Transformation)和投影(Projection)          頂點(Vertex),能夠通過一種稱為變換矩陣(Transformat

集群之mysql主從配置windows和linux版

p s class 本地 -h 路徑 數據庫容災 主從機 混合 二進制文件 起因   由於網站進一步開發運行的需求,要求主機7*24小時運行正常,同時要求能夠防止數據庫災難。考慮到後期的開發程度和業務量,準備向高可用系統進行改變,同時通過負載均衡提高網絡性能。於是第一步就

Apache Shiro學習----配置與SpringMVC集成

async 匹配 過濾 -i fig hit http struct 找到 1.web.xml文件中配置 <!--將shiro的配置文件交給Spring監聽器初始化--> <context-param> <param

struts2的xml配置struts-2.3.15

names end action apache .org ctype extends fault default <!-- 約束文件 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//D

TypeHandler簡介及配置mybatis源碼篇

java rtt 當我 mes ons byte[] throws call dstat 作者:南柯夢 Mybatis中的TypeHandler是什麽?   無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一

Traffic-Server配置待補充和更新

exp onf 存儲 空間 時間 cache 1-1 byte conn Server 5.3.2 測試1.裸盤:remap.configmap http://192.168.227.131 http://192.168.227.131:8080 #traffic_ser

Mac下使用PF進行端口轉發和防火墻配置類似Linux的iptables

火墻 get 端口 生效 proto 保護 功能 net inet6 在Mac沒有iptables這些,替代的軟件為PF,命令為pfctl。在早些版本用ipfw(<=10.10),後面改為PF。還有一些可以使用OpenBsd,不過這個不太好用。 網上關於pfctl的

kafka+zookeeper環境配置linux環境單機版

producer lai ror detail gin prop tex wget start 版本: CentOS-6.5-x86_64 zookeeper-3.4.6 kafka_2.10-0.10.1.0 一.zookeeper下載與安裝 1)下載 $ wge

進行hybrid鏈路配置華為交換機實驗

nal 1.4 日誌 erl def mar edit dex 運維 網絡運維 hybrid 實驗報告 姓名: 任永輝 班

Linux Centos 6.5 DNS主從復制配置bind-9.8.2

DNS Linux 運維測試環境:OS: Centos 6.5bind : 9.8.2軟件安裝方式: yum主DNS:realserver1 192.168.200.134從DNS:realserver2 192.168.200.135測試服務器: test01 192.168.200.136 第一步

Oracle事務和對象視圖、索引

Oracle 事務 索引 視圖 張晨 一、Oracle事務·事務的含義:事務是業務上的一個邏輯單元,為了保證數據的所有操作要麽全部完成,要麽全部失敗。1、事務的開始是從一條SQL語句開始,結束於下面的幾種情況:1)顯示提交:輸入commit指令,事務完成提交2)顯示回滾:輸入rollbac

服務器配置參考how2j教學網站,很不錯,親測可行

最快 .com jdk 參考 tom src 版本 alt 系統選擇 點擊訪問阿裏雲官網地址:http://aliyun.com/ 沒有賬號的點擊aliyun右上角免費註冊,註冊過程大同小異略過不表。 鏡像選擇公共鏡像,其中操作系統選

elasticsearch(es) 集群恢復觸發配置Local Gateway參數

ram 這份 驅動程序 數據節點 數據恢復 reference time 影響 相互 elasticsearch(es) 集群恢復觸發配置(Local Gateway) 當你集群重啟時,幾個配置項影響你的分片恢復的表現。 首先,我們需要明白如果什麽也沒配置將會發生什麽。 想

linux軟件安裝、rpm操作命令、本地yum配置有什麽用

nbsp -i linux cto 需要 -c 局域網 資源 file 1.yum是什麽? yum的全稱是yellow dog updater,modified,是一個shell前端軟件包管理器;基於RPM包管理,能夠從指定的服務器下載RPM包並自動安裝,可以自動處理依賴性

<親測>CentOS 7.3下Node.js 8.6安裝配置含NPM以及PM2

命令 mod profile 添加 data- x64 dsm 解壓 .net CentOS 7.3下Node.js 8.6安裝配置 2017年09月30日 14:12:02 閱讀數:2245更多 個人分類: Nodejs

Nginx反向代理配置解決跨域問題

一. 跨域    指的是瀏覽器不能執行其他網站的指令碼。它是由瀏覽器的同源策略造成的,是瀏覽器對 JavaScript 施加的安全限制。 實際開發過程中表現為,如果本地的Html程式碼未提交到伺服器,本地是不能直接呼叫伺服器 API 獲取資料的。 二. Nginx