1. 程式人生 > >C#OpenGL(SharpGL)繪製可旋轉長方體

C#OpenGL(SharpGL)繪製可旋轉長方體

全域性欄位:

   // X軸座標

       private float _x = 0;

       // Y軸座標

       private float _y = 0;

       //Z軸座標

       private float _z = 0;

OpenGLOpenGLDraw事件:

       //OpenGL繪圖事件

       private voidmyOpenGL_OpenGLDraw(object sender,RenderEventArgs args)

       {

            SharpGL.OpenGL gl = new OpenGL();       //

建立OpenGL物件

            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            gl.LoadIdentity();            //清除深度快取

            //重置模型觀察矩陣,我認為其實就是重置了三維座標軸的位置,將其初始化為原點

            gl.Translate(0f, 0f, -6f);  //最後一個引數為距離螢幕距離

            //影象旋轉

            gl.Rotate(_x, 1.0f, 0.0f, 0.0f); //

繞X軸旋轉

            gl.Rotate(_y, 0.0f, 1.0f, 0.0f); // 繞Y軸旋轉

            gl.Rotate(_z, 0.0f, 0.0f, 1.0f); // 繞Z軸旋轉

            gl.Begin(OpenGL.GL_LINE_LOOP);           // Start Drawing The Cube

            //長方體6個面繪製(1)

            gl.Vertex(-1.0f, 1.0f, 0.0f);

            gl.Vertex(1.0f, 1.0f, 0.0f);

            gl.Vertex(1.0f, -1.0f, 0.0f);

            gl.Vertex(-1.0f, -1.0f, 0.0f);

            gl.End();         // DoneDrawing The Q

            //(2

            gl.Begin(OpenGL.GL_LINE_LOOP);           

            gl.Vertex(-1.0f, 1.0f, -1.0f);

            gl.Vertex(1.0f, 1.0f, -1.0f);

            gl.Vertex(1.0f, -1.0f, -1.0f);

            gl.Vertex(-1.0f, -1.0f, -1.0f);

            gl.End();     

            //(3

           gl.Begin(OpenGL.GL_LINE_LOOP);       

            gl.Vertex(-1.0f, 1.0f, 0.0f);

            gl.Vertex(-1.0f, 1.0f, -1.0f);

            gl.End();           

            //(4

            gl.Begin(OpenGL.GL_LINE_LOOP);         

            gl.Vertex(1.0f, 1.0f, 0.0f);

            gl.Vertex(1.0f, 1.0f, -1.0f);

            gl.End();      

            //(5

            gl.Begin(OpenGL.GL_LINE_LOOP);            

            gl.Vertex(1.0f, -1.0f, 0.0f);

            gl.Vertex(1.0f, -1.0f, -1.0f);

            gl.End();        

            //(6

            gl.Begin(OpenGL.GL_LINE_LOOP);          

            gl.Vertex(-1.0f, -1.0f, 0.0f);

            gl.Vertex(-1.0f, -1.0f, -1.0f);

            gl.End();          

       }

首先在From窗體中新增OpenGL的控制元件,新增OpenGLDraw事件,在事件中編寫對應繪圖程式碼。調整全域性變數_x,_y,_z的值可以實現影象的旋轉。

相關推薦

C#OpenGL(SharpGL)繪製旋轉長方體

全域性欄位:    // X軸座標        private float _x = 0;        // Y軸座標        private float _y = 0;        //Z軸座標        private float _z = 0;

OpenGL——點的繪製(使用OpenGL繪製旋轉座標系的螺旋線)

package com.example.opengl1; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedi

opengles繪製旋轉的球體

球體繪製類 package test.com.opengles6_1; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.uti

Android 系列 5.2使用OpenGL ES繪製旋轉立方體

5.2使用OpenGL ES繪製旋轉立方體 問題 您想建立一個基本的OpenGL ES應用程式。 解 建立一個GLSurfaceView和一個自定義渲染器,將繪製一個旋轉立方體。 討論 Android通過OpenGL ES API支援3D圖形,這是一種專為嵌入式裝置設計的O

C#使用Xamarin開發移植移動應用(3.進階篇MVVM雙向綁定和命令綁定)附源碼

www. 變更 ges ntp image 上下文 判斷 接口 images 前言 系列目錄 C#使用Xamarin開發可移植移動應用目錄 源碼地址:https://github.com/l2999019/DemoApp 可以Star一下,隨意 - - 說點什麽.. 嗯..

C#使用Xamarin開發移植移動應用進階篇(7.使用布局渲染器,修改默認布局),附源碼

頂部 urn hit .com move 應用開發 當前 namespace int 前言 系列目錄 C#使用Xamarin開發可移植移動應用目錄 源碼地址:https://github.com/l2999019/DemoApp 可以Star一下,隨意 - - 說點什麽..

C#使用Xamarin開發移植移動應用進階篇(8.打包生成安卓APK並精簡大小),附源碼

demo page 模糊 icon 通過 itl 是不是 es2017 微軟 前言 系列目錄 C#使用Xamarin開發可移植移動應用目錄 源碼地址:https://github.com/l2999019/DemoApp 可以Star一下,隨意 - - 說點什麽.. 嗯,前

QT中給各控件增加背景圖片(縮放旋轉)的幾種方法

.net detail eight iou rotate art board 按鈕 previous 1. 給QPushButton 增加背景圖片:背景圖片可根據Button大小自由縮放。 [cpp] view plain copy vo

Canvas實現3D效果-旋轉的立方體

獲得 操作 陰影 換算 http 取出 main TP 變換 摘要:Canvas畫布是一個二維平面,如何展示出3D效果?通過將三維空間中的Z軸抽取出來,將圖像的點投影到與Z軸垂直的平面上,在通過旋轉等變換效果,我們就能實現3D效果。 一、建立坐標系 1)立方體坐標系

2018牛客網暑期ACM多校訓練營(第三場)C Shuffle Cards(持久化平衡樹/splay)

car 訓練營 shu cas queue math getchar() %d fir 題意 牌面初始是1到n,進行m次洗牌,每次抽取一段放到最前面。求最後的序列。 分析 神操作!!!比賽時很絕望,splay技能尚未點亮,不知道怎麽用。 殊不知,C++庫裏有rope

【Unity3D BezierCurve繪製曲線】動態新增路徑點繪製調節曲線(三維空間)

近日,專案需求:前提:三維空間 1.動態新增(刪除)路徑點,通過兩個以上的路徑點來繪製曲線,刪除點之後不影響其他點繪製曲線; 2.每個路徑點都可以被拖拽發生位移,可以通過鎖定某個軸,使該軸不發生位移; 3.每個路徑點處有兩個可調節點(首尾只有一個調節點),可通過調節點來調節曲線切線(

openGL紋理繪製

#include <stdlib.h> #include <GL/glut.h> #define imageWidth 64 #define imageHeight 64 GLubyte image[imageWidth][imageHeight][3]; /*繪製一個簡

OpenGl基礎繪製

渲染圖形的基本流程 1.建立GLSurfaceView 2.初始化渲染器 3.onSurfaceCreated(),onSurfaceChanged(),onDrawFrame()三個方法 4.著色器(頂點著色器,片元著色器) 5.頂點 顏色 紋理 6.繪製

在螢幕繪製一個旋轉的線框立方體(使用頂點快取和索引快取)

首先裡面還是有兩個基本的檔案:d3dUtility.h以及d3dUtility.cpp 裡面的主要內容就是實現Direct3D的初始化,以及模板函式的的實現,和訊息迴圈函式的宣告,回撥函式的宣告。 具體的解釋在部落格:在螢幕繪製一個三角形以及Direct3D初始化例程中有詳細的解釋,這裡

C++ Leetcode初級演算法之旋轉影象

給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 1: 給定 matrix = [ [1,2,3], [4,5,6], [7,8,9]

iOS Tabbar中間新增凸起旋轉按鈕

前言 最近的專案中有需求在tabbar中間新增凸起按鈕,並且點選時按鈕要旋轉,看了仿閒魚的凸起,點選後是present出來View,而不是像常規的tabbar上新增一個頁面(親測,閒魚的超出Tabbar部分點選是沒有反應的,這是bug啊,下文對這個問題有詳解),所以不符合要求,經過一段摸索最後得的一個

canvas繪製控制的行走的小人

素材img 程式碼 var Person = function (ctx) { /*繪製工具*/ this.ctx = ctx || document.querySelector('canvas').getContext('2d');

C語言實現BMP影象旋轉

 實現影象旋轉,首先要對影象的儲存,影象的讀寫比較清楚,在此基礎上進行線性變換。以下程式碼為逆時針旋轉90度,後續會給出旋轉任意角度的程式碼: 核心還是掌握旋轉時的前後變換。變換的過程可以歸結為:首先將影象座標變換為數學座標,然後在數學座標上進行變換,然後在進行逆變換,得到在影象座

C語言實現BMP影象旋轉(任意角度)

實現對對任意角度的旋轉,具體數學推導網上找。如果各位讀者需要使用,只需要將開啟檔案的位置改為你的位置,輸入不同的角度即可: #include <Windows.h> #include <stdio.h> #include <stdlib.h> #incl

Linux C實現檔案拷貝變色進度條顯示

printf的格式化輸出中,可以設定前景色和背景色,因此進度條的顏色可以通過printf的格式化輸出來實現;此外,進度條的實現主要依靠"\r"和"fflush(stdout)“來支援。”\r" 用來回到行首而不換行,fflush(stdout)是重新整理螢幕輸出