win10搭建opengl環境搭建并測試--輸出立方體球體和碗型并在球體上貼圖

參照本文檔可以完成環境搭建和測試,如果想要快速完成環境的搭建可以獲取本人的工程,包括所用到的工具鏈和測試工程源碼獲取(非免費介意務下載):鏈接: https://pan.baidu.com/s/1H2ejbT7kLM9ore5MqyomgA 提取碼: 8s1b?

1、環境搭建

1)安裝glew

https://sourceforge.net/projects/glew/

直接下載,當前使用的版本是glew-2.2.0-win32.zip

放到指定的路徑并解壓

如下所示:

2)安裝glfw

Download | GLFW

直接下載,當前使用的版本是glfw-3.4.bin.WIN64.zip

放到指定的路徑并解壓

如下所示:

3)安裝freeglut

https://www.transmissionzero.co.uk/software/freeglut-devel/

直接下載,當前使用的版本是glfw-3.4.bin.WIN64.zip

放到指定的路徑并解壓

如下所示:

2、配置MFC工程和測試

配置如下所示

設置包含目錄

E:\opengl\glfw-3.4.bin.WIN64\includeE:\opengl\glew-2.2.0\includeE:\opengl\freeglut\include

設置庫目錄

E:\opengl\glfw-3.4.bin.WIN64\lib-vc2022E:\opengl\glew-2.2.0\lib\Release\x64E:\opengl\freeglut\lib\x64
 
 

連接器設置

freeglut.lib
glew32.lib
glew32s.lib
glfw3.lib
glfw3_mt.lib
glfw3dll.lib

3、測試界面

4、運行效果

1、正方形測試

部分源碼

	int argc = 1; // 至少需要一個參數(程序名)  char* argv[1] = { "program" }; // 模擬程序名  glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("第一個OpenGL程序");glutDisplayFunc(&myDisplay);glutMainLoop();

2、立方體測試

部分源碼

// 繪制立方體  
void displayMe() {glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除顏色和深度緩沖區  glLoadIdentity(); // 重置模型視圖矩陣  // 設置觀察位置  gluLookAt(0.0, 0.0, 5.0,  // 攝像機位置  0.0, 0.0, 0.0,  // 觀察目標  0.0, 1.0, 0.0); // 上方向  // 旋轉立方體  glRotatef(angle, 1.0f, 1.0f, 0.0f); // 繞 (1, 1, 0) 軸旋轉  // 繪制立方體  glBegin(GL_QUADS);// 前面  glColor3f(1.0f, 0.0f, 0.0f); // 紅色  glVertex3f(-1.0f, -1.0f, 1.0f);glVertex3f(1.0f, -1.0f, 1.0f);glVertex3f(1.0f, 1.0f, 1.0f);glVertex3f(-1.0f, 1.0f, 1.0f);// 后面  glColor3f(0.0f, 1.0f, 0.0f); // 綠色  glVertex3f(-1.0f, -1.0f, -1.0f);glVertex3f(-1.0f, 1.0f, -1.0f);glVertex3f(1.0f, 1.0f, -1.0f);glVertex3f(1.0f, -1.0f, -1.0f);// 左面  glColor3f(0.0f, 0.0f, 1.0f); // 藍色  glVertex3f(-1.0f, -1.0f, -1.0f);glVertex3f(-1.0f, -1.0f, 1.0f);glVertex3f(-1.0f, 1.0f, 1.0f);glVertex3f(-1.0f, 1.0f, -1.0f);// 右面  glColor3f(1.0f, 1.0f, 0.0f); // 黃色  glVertex3f(1.0f, -1.0f, -1.0f);glVertex3f(1.0f, 1.0f, -1.0f);glVertex3f(1.0f, 1.0f, 1.0f);glVertex3f(1.0f, -1.0f, 1.0f);// 頂面  glColor3f(0.0f, 1.0f, 1.0f); // 青色  glVertex3f(-1.0f, 1.0f, -1.0f);glVertex3f(-1.0f, 1.0f, 1.0f);glVertex3f(1.0f, 1.0f, 1.0f);glVertex3f(1.0f, 1.0f, -1.0f);// 底面  glColor3f(1.0f, 0.0f, 1.0f); // 紫色  glVertex3f(-1.0f, -1.0f, -1.0f);glVertex3f(1.0f, -1.0f, -1.0f);glVertex3f(1.0f, -1.0f, 1.0f);glVertex3f(-1.0f, -1.0f, 1.0f);glEnd();glutSwapBuffers(); // 交換前后緩沖區  
}void CjsAVMopenglDlg::OnBnClickedButton1()
{TODO: 在此添加控件通知處理程序代碼int argc_fake = 1;char* argv_fake[1] = { "program" };glutInit(&argc_fake, argv_fake);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(500, 500);glutCreateWindow("3D Cube");glEnable(GL_DEPTH_TEST); // 啟用深度測試  glutDisplayFunc(displayMe);glutReshapeFunc(reshapeMe);// 使用定時器控制旋轉速度  glutTimerFunc(16, updateRotation, 0); // 每 16 毫秒調用一次 updateRotation  glutMainLoop();
}

3、球體測試(帶貼圖)

部分源碼

// 繪制函數  
void display() {// 清除顏色和深度緩沖  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();// 設置觀察點  gluLookAt(0.0, 0.0, 5.0,  // 相機位置  0.0, 0.0, 0.0,  // 觀察點  0.0, 1.0, 0.0); // 上方向  // 旋轉地球  glRotatef(angle, 0.0f, 1.0f, 0.0f);// 啟用紋理  glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D, texture);// 創建球體  GLUquadric* sphere = gluNewQuadric();gluQuadricTexture(sphere, GL_TRUE);gluQuadricNormals(sphere, GLU_SMOOTH);gluSphere(sphere, 1.8, 50, 50);  // 半徑1.0,50x50分段  gluDeleteQuadric(sphere);// 禁用紋理  glDisable(GL_TEXTURE_2D);// 交換緩沖區  glutSwapBuffers();
}
//MFC對話框按鈕點擊事件  
void CjsAVMopenglDlg::OnBnClickedButton3()
{// 初始化GLUT  int argc = 1;char* argv[1] = { (char*)"Something" };glutInit(&argc, argv);// 設置顯示模式  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);// 設置窗口大小和位置  glutInitWindowSize(800, 800);glutInitWindowPosition(100, 100);// 創建窗口  glutCreateWindow("Earth Rotation");// 初始化OpenGL  init();// 加載紋理  loadTexture();// 設置回調函數  glutDisplayFunc(display);glutReshapeFunc(reshape);glutTimerFunc(0, update, 0);// 進入主循環  glutMainLoop();
}

4、碗型測試


// 窗口大小變化回調函數  
void reshape_wan(int width, int height) {glViewport(0, 0, width, height);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45.0f, (float)width / height, 0.1f, 100.0f);glMatrixMode(GL_MODELVIEW);
}// 鍵盤回調函數  
void keyboard(unsigned char key, int x, int y) {switch (key) {case '1':   // 碗型視圖  viewMode = 0;break;case '2':   // 俯視圖  viewMode = 1;break;case '3':   // 分屏視圖  viewMode = 2;break;case '+':   // 放大  case '=':zoom += 1.0f;break;case '-':   // 縮小  case '_':zoom -= 1.0f;break;case 27:    // ESC鍵,退出程序  // 釋放紋理內存  for (int i = 0; i < 5; i++) {delete[] textureData[i];}exit(0);break;}glutPostRedisplay();
}// 方向鍵回調函數  
void specialKeys(int key, int x, int y) {switch (key) {case GLUT_KEY_UP:rotX += 5.0f;break;case GLUT_KEY_DOWN:rotX -= 5.0f;break;case GLUT_KEY_LEFT:rotY -= 5.0f;break;case GLUT_KEY_RIGHT:rotY += 5.0f;break;}glutPostRedisplay();
}// 鼠標處理  
int mouseX = 0, mouseY = 0;
bool mouseLeftDown = false;
bool mouseRightDown = false;void mouse(int button, int state, int x, int y) {mouseX = x;mouseY = y;if (button == GLUT_LEFT_BUTTON) {if (state == GLUT_DOWN)mouseLeftDown = true;elsemouseLeftDown = false;}else if (button == GLUT_RIGHT_BUTTON) {if (state == GLUT_DOWN)mouseRightDown = true;elsemouseRightDown = false;}
}void mouseMotion(int x, int y) {if (mouseLeftDown) {rotY += (x - mouseX);rotX += (y - mouseY);mouseX = x;mouseY = y;}if (mouseRightDown) {zoom += (y - mouseY) * 0.1f;mouseY = y;}glutPostRedisplay();
}// MFC按鈕事件處理  
void CjsAVMopenglDlg::OnBnClickedButton4()
{// TODO: 在此添加控件通知處理程序代碼  int argc = 1;char* argv[1] = { (char*)"Something" };glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(1000, 600);glutCreateWindow("OpenGL AVM 碗型投影全景系統");init_wan();glutDisplayFunc(display_wan);glutReshapeFunc(reshape_wan);glutKeyboardFunc(keyboard);glutSpecialFunc(specialKeys);glutMouseFunc(mouse);glutMotionFunc(mouseMotion);glutMainLoop();
}

動態視頻測試

基于opengl實現球面貼圖旋轉

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72808.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72808.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CIR-Net:用于 RGB-D 顯著性目標檢測的跨模態交互與優化(問題)

摘要 問題一&#xff1a;自模態注意力優化單元和跨模態加權優化單元什么意思&#xff1f; 1 優化中間件結構的作用 位置&#xff1a;位于編碼器和解碼器之間 輸入&#xff1a;編碼器提取的RGB特征&#xff0c;深度特征以及RGB-D特征。 輸出&#xff1a;經過優化的RGB&…

LS-NET-004-簡單二層環路解決(華為銳捷思科)

LS-NET-004-簡單二層環路解決&#xff08;華為銳捷思科&#xff09; 以下是為您準備的二層環路示意圖及解決方案&#xff0c;包含四大廠商配置對比&#xff1a; 一、Mermaid 二層環路示意圖 graph TD SW1 -->|Gi0/1| SW2 SW2 -->|Gi0/2| SW3 SW3 -->|Gi0/3| SW1 SW1…

【正點原子K210連載】第七十六章 音頻FFT實驗 摘自【正點原子】DNK210使用指南-CanMV版指南

第七十六章 音頻FFT實驗 本章將介紹CanMV下FFT的應用&#xff0c;通過將時域采集到的音頻數據通過FFT為頻域。通過本章的學習&#xff0c;讀者將學習到CanMV下控制FFT加速器進行FFT的使用。 本章分為如下幾個小節&#xff1a; 32.1 maix.FFT模塊介紹 32.2 硬件設計 32.3 程序設…

火絨終端安全管理系統V2.0——行為管理(軟件禁用+違規外聯)

火絨終端安全管理系統V2.0&#xff1a;行為管理策略分為軟件禁用和違規外聯兩部分&#xff0c;能夠管理終端用戶軟件的使用&#xff0c;以及終端用戶違規連接外部網絡的問題。 l 軟件禁用 軟件禁用策略可以選擇軟件名單的屬性、添加軟件名單以及設置發現終端使用禁用軟件時的…

FastJson:JSON JSONObject JSONArray詳解以及SimplePropertyPreFilter 的介紹

FastJson&#xff1a;JSON JSONObject JSONArray詳解以及SimplePropertyPreFilter 的介紹 FastJson是阿里巴巴開發的一款專門用于Java開發的包&#xff0c;實現Json對象&#xff0c;JavaBean對&#xff0c;Json字符串之間的轉換。 文章目錄 FastJson&#xff1a;JSON JSONObje…

DEFI幣生態重構加速,XBIT去中心化交易所引領DEX安全新范式

2025年3月18日&#xff0c;全球加密市場在監管與技術共振下迎來結構性變革。去中心化金融&#xff08;DeFi&#xff09;代幣DEFI幣因跨鏈流動性協議升級引發社區熱議&#xff0c;而幣應XBIT去中心化交易所&#xff08;以下簡稱XBIT&#xff09;憑借其鏈上透明驗證機制、無需下載…

解析漏洞總結

首先說下為什么要寫著篇文章&#xff0c;之前學習倒是學過&#xff0c;學完就忘啊&#xff0c;tmd iis 5.x/6.0 這個版本有兩種解析姿勢  一.兩種解析漏洞 1.目錄解析 2./xxx.asp/xx.jpg 簡單說一下是什么意思&#xff0c;這里是先在他服務器跟目錄創建一個名為 xxx.…

前端小食堂 | Day18 - 身份認證の八卦陣

&#x1f510; 今日秘術&#xff1a;JWT/OAuth2 攻防奧義 1. JWT 安全の六合陣法 // &#x1f6ab; 危險操作&#xff1a;未驗證簽名 const decodeUnsafe (token) > JSON.parse(atob(token.split(.)[1])); // ? 安全姿勢一&#xff1a;嚴格簽名驗證 import jwt fro…

將bin文件燒錄到STM32

將bin文件燒錄到STM32 CoFlash下載生成hex文件hex2bin使用下載bin到單片機 CoFlash下載 選擇需要安裝的目錄 在Config中可以選擇目標芯片的類型 我演示的是 stm32f103c8t6 最小系統板 Adapter&#xff1a;燒錄器類型 Max Clock&#xff1a;下載速度 Por&#xff1a;接口類型&am…

【Embedded World 2025:邊緣 AI、存儲革新與 1X nm 工藝重塑嵌入式未來】

Embedded World 2025于3月11-13日在德國紐倫堡舉辦&#xff0c;作為全球嵌入式系統領域頂級盛會&#xff0c;匯聚超千家展商與3萬專業觀眾&#xff0c;聚焦嵌入式智能、安全管理及行業解決方案。展會呈現邊緣AI、低功耗MCU、5G RedCap、新型存儲及車規級技術等前沿方向&#xf…

3.19刷題

P6443 [COCI 2010/2011 #1] TIMSKO - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n,m,k,maxp0;cin>>m>>n>>k;for(int i0;i<n;i){//男生參加人數if(k3*i<mn&&2*i<m) maxpi;}cout<<maxp;return 0; }P645…

Android NDK --- JNI從入門到基礎的全面掌握 (上)

引言 先問 jni是什么&#xff1f; jni和ndk 的關系&#xff1f; 答&#xff1a; java調用 C、C 的代碼。 兩者一個是調用&#xff0c;一個是用c 、c 寫 。 這兩個問題問出來似乎知道又好像不知道。 正文 jni 概述 定義&#xff1a;java Native Interface 即 java本地接口 …

爬蟲 crawler 入門爬取不設防網頁 并實現無限增生

基礎版本 爬取網頁后直接將前端html代碼不加處理的輸出 # pip3 install requests import requests# request the target URL def crawler():response requests.get("https://www.scrapingcourse.com/ecommerce/")response.raise_for_status()print(response.text)…

C++高頻(四)之c++11新特性

C++面試高頻(四)之c++11新特性 1.簡述C++11有什么新特性?? 自動類型推導(Type Inference):引入了 auto 關鍵字,允許編譯器根據初始化表達式的類型自動推導變量的類型。統一的初始化語法(Uniform Initialization Syntax):引入了用花括號 {} 進行初始化的統一語法,可…

HarmonyOs- UIAbility應用上下文

上下文為何物 上下文在計算機科學領域是一個廣泛存在的概念。是現代操作系統核心抽象概念之一。其本質是環境信息的結構化封裝。 有過開發經驗的都知道&#xff0c;當我們在一個系統上進行開發的時候&#xff0c;無論是Android&#xff0c;HarmonyOs&#xff0c;Linux 等等&a…

Redis解決緩存擊穿問題——兩種方法

目錄 引言 解決辦法 互斥鎖&#xff08;強一致&#xff0c;性能差&#xff09; 邏輯過期&#xff08;高可用&#xff0c;性能優&#xff09; 設計邏輯過期時間 引言 緩存擊穿&#xff1a;給某一個key設置了過期時間&#xff0c;當key過期的時候&#xff0c;恰好這個時間點對…

架構思維:軟件建模與架構設計的關鍵要點

文章目錄 1. 軟件建模的核心概念2. 七種常用UML圖及其應用場景類圖時序圖組件圖部署圖用例圖狀態圖活動圖 3. 軟件設計文檔的三階段結構4. 架構設計的關鍵實踐1. 用例圖&#xff1a;核心功能模塊2. 部署圖&#xff1a;架構演進階段3. 技術挑戰與解決方案4. 關鍵架構圖示例5. 架…

numpy學習筆記14:模擬隨機游走過程(一次實驗)

numpy學習筆記14&#xff1a;模擬隨機游走過程(一次實驗) 隨機游走是一個對象在離散時間步中的隨機移動&#xff0c;每次移動的方向和步長由概率決定。在用戶提供的代碼中&#xff0c;步長數組steps的每個元素是-1或1&#xff0c;代表向左或向右移動一步。np.random.choice的作…

FPGA-DE2115開發板實現流水燈

文章目錄 一、安裝VScode&#xff0c;在其中下載安裝Verilog-HDL/SystemVerilog插件&#xff1b;&#xff08;1&#xff09;安裝VScode&#xff08;2&#xff09;安裝插件&#xff08;3&#xff09;與Quartus關聯 二、不分模塊實現流水燈&#xff08;1&#xff09;新建工程&…

JS逆向案例-HIKVISION-視頻監控的前端密碼加密分析

免責聲明 本文僅為技術研究與滲透測試思路分享,旨在幫助安全從業人員更好地理解相關技術原理和防御措施。任何個人或組織不得利用本文內容從事非法活動或攻擊他人系統。 如果任何人因違反法律法規或不當使用本文內容而導致任何法律后果,本文作者概不負責。 請務必遵守法律…