gl

FreeGlut 和 OpenGL多窗口显示

假装没事ソ 提交于 2020-03-02 02:55:25
glut多窗口(子窗口)程序的实现:类似MFC的拆分窗口, http://hi.baidu.com/gongziya/item/fc232eac321212a628ce9d30 和: http://www.lighthouse3d.com/tutorials/glut-tutorial/subwindows/ 多个窗口(不是子窗口): http://www.cs.uml.edu/~hmasterm/Charts/Managing_Multiple_Windows.pdf 和: http://www.cs.uml.edu/~hmasterm/Charts/Managing_Multiple_Windows.pdf #include <Windows.h> #include <GL/GL.h> #include <GL/freeglut.h> */ /*--> */ void window1_reshape(int width, int height) { } void window1_display() { glClear(GL_COLOR_BUFFER_BIT); glClearColor(1.0,1.0,0.0,1.); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0);

WebGL渲染2D图形

拥有回忆 提交于 2020-01-27 13:59:48
WebGL是通过OpenGL ES在HTML的<canvas></canvas>上渲染图形的。 ... <canvas id="main-canvas"></canvas> ... let gl = document.getElementById("main-canvas").getContext("webgl"); if (!gl) { alert("无法使用WebGL!"); } else { console.log(gl); } 这样,就获取到了在canvas上渲染webgl的上下文。 接下来,在canvas上一切的渲染操作,最终都是要依靠这个gl变量来控制的。 不过在此之前,需要作一下前期准备。 着色器准备 首先要准备一下着色器的源码,着色器(shader)是由GLSL(OpenGL Shadering Language,一种类C++语言)编写的计算机程序。着色器是成对出现的,分别是顶点着色器: <script type="notjs" id="vertex-shader-2d"> attribute vec4 a_position; void main() { gl_Position = a_position; } </script> 和片段着色器: <script type="notjs" id="fragment-shader-2d"> precision

1.5 群的同构

假装没事ソ 提交于 2020-01-20 20:28:26
§5 群的同构 定义1.5.1 (同构) 设 G G G 和 G ′ G' G ′ 是两个群。若有一个从 G G G 到 G ′ G' G ′ 的双射 σ \sigma σ ,它对于所有的 x , y ∈ G x,y \in G x , y ∈ G 有 σ ( x y ) = σ ( x ) σ ( y ) \sigma(xy) = \sigma(x) \sigma(y) σ ( x y ) = σ ( x ) σ ( y ) 则称 G G G 同构于 G ′ G' G ′ 。具有以上性质的双射称为 G G G 到 G ′ G' G ′ 的一个 同构映射 ,或简称 同构 。 注: 由定义显见:同构映射将单位元素映到单位元素,将逆元素映到逆元素。 群的同构作为群之间的一种关系,满足自反性、对称性和传递性。 在同构映射下,对应的元素在各自的运算下具有相同的代数性质。 在抽象地研究一个群时,无需对同构的群加以区别。 在历史上,群论最早研究的就是变换群,抽象群的概念也是从变换群的概念中抽象而来的。 定理1.5.1 (Cayley定理) 任何一个群都同构于某一集合上的变换群。 证明 设 G G G 是一个群。对于每个 a ∈ G a \in G a ∈ G ,定义同一个集合 G G G 的变换 σ a \sigma_{a} σ a ​ 如下: σ a ( x ) = a x , x ∈ G

用openGL做一个时钟动画

梦想与她 提交于 2019-12-17 03:11:30
#include<stdlib.h> #include<glut.h> #include<gl\GLU.h> #include<gl\GL.h> #include<math.h> #include<stdio.h> #include<windows.h> float tite = 0.0f; const float PI = 3.14159f; const int W_width = 500; const int W_height = 500; float xc, yc, R, n; float ss, mm, hh; const int S_width = glutGet(GLUT_SCREEN_WIDTH); const int S_height = glutGet(GLUT_SCREEN_HEIGHT); //system void init(); void draw(); void reShape(int ww, int hh); //colck void drawCircle(); void myIdle(); void drawline(); void TimerFunc(int value); void arith_foot(); void drawshortLine(); void TimerFunc(int value); void init(){ glClear

WebGL绘图

不羁岁月 提交于 2019-12-08 14:19:14
WebGL绘图 基本的几何图元有:三角形、线和点精灵,3D模型都是通过这些几何图元组成的。WebGL中有两个绘制图元的方法: gl.drawArrays() 和 gl.drawElements() 图元 三角形 WebGL中绘制三角形有三种方式: gl.TRINGLES(独立三角形) 、 gl.TRINGLE_STRIP(三角形带) 、 glTRINGLE_FAN(三角形扇) 。 对于一系列点 (v0、v1、v2、......) ,独立的三角形每三个点组成一个三角形 ((v0,v1,v2)、(v2,v3,v4)、......) ;三角形带每次将当前三角形的后面两个顶点与下一个顶点组成三角形 ((v0,v1,v2)、(v1,v2,v3)、......) ;三角形扇除掉第一个顶点,后面的每两个顶点与第一个顶点组成三角形 ((v0,v1,v2)、(v0,v3,v4)、......) 。 线 WebGL中绘制线有三种方式: gl.LINES(独立线) 、 gl.LINE_STRIP(线带) 、 gl.LINE_LOOP(线环) 。 对于一系列点 (v0、v1、v2、......) ,独立线每两个点组成一条线 ((v0,v1)、(v2,v3)、......) ;线带每次将当前线的后面一个顶点与下一个顶点组成三角形 ((v0,v1)、(v1,v2)、......) ;线环与线带类似

webgl 灰度shader

给你一囗甜甜゛ 提交于 2019-12-08 14:16:55
var canvasElement=document.getElementById('webgl'); var gl=canvasElement.getContext('webgl'); //顶点着色器源码 var vertexShaderSource = '' + 'attribute vec4 a_Position;'+//顶点位置坐标 'attribute vec2 a_TexCoord;' +//纹理坐标 'varying vec2 v_TexCoord;'+//插值后纹理坐标 'void main(){' + 'gl_Position = a_Position;' +//逐顶点处理 'v_TexCoord = a_TexCoord;' +//纹理坐标插值计算 '}'; //片元着色器源码 var fragShaderSource = '' + 'precision highp float;' +//所有float类型数据的精度是lowp 'varying vec2 v_TexCoord;'+//接收插值后的纹理坐标 'uniform sampler2D u_Sampler;' +//纹理图片像素数据 'void main(){' + //采集纹素 'vec4 texture = texture2D(u_Sampler,v_TexCoord);' + /

在worker中使用offscreenCanvas

匿名 (未验证) 提交于 2019-12-03 00:39:02
HTMLΪ <! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta http-equiv = "X-UA-Compatible" content = "ie=edge" > < title > worker基本使用 </ title > </ head > < body > < canvas id = "myCanvas" ></ canvas > < button onclick = "click()" ></ button > </ body > < script > var offscreen = null ; var worker = new Worker ( ‘offscreencanvas.js‘ ) function click () { if ( offscreen == null ){ var htmlCanvas = document . getElementById ( ‘myCanvas‘ ) offscreen = htmlCanvas . ControlToOffscreen () worker

15、事例十五:纹理映射

不想你离开。 提交于 2019-11-27 10:49:10
namespace sharpGLTest15 { public partial class SharpGLForm : Form { float ang = 0f; SharpGL.SceneGraph.Assets.Texture[] textrue; float[] fLightPosition = new float[4] { 0.0f, 0.0f, 0.0f, 1.0f }; //5f, 8f, -8f, 1f };// 光源位置 float[] fLightAmbient = new float[4] { 0f, 0f, 0f, 1f };// 环境光参数 float[] fLightDiffuse = new float[4] { 1f, 1f, 1f, 1f };// 漫射光参数 float[] fLightSpecular = new float[4] { 1f, 1f, 1f, 1f }; //镜面反射 public SharpGLForm() { InitializeComponent(); } private void openGLControl_OpenGLInitialized(object sender, EventArgs e) { textrue = new SharpGL.SceneGraph.Assets.Texture[6]; for

16、事例十六:多重纹理映射

人盡茶涼 提交于 2019-11-27 10:48:58
//自动生成出现问题,推荐采用传统新建winform形式 namespace sharpGLTest16_1 { public partial class Form1 : Form { static float wrap = 0; // 用于雾的流动 SharpGL.SceneGraph.Assets.Texture[] textureAry = new SharpGL.SceneGraph.Assets.Texture[4]; float[] fLightPosition = new float[4] { 0.0f, 0.0f, 8.0f, 1.0f }; // 光源位置 float[] fLightAmbient = new float[4] { 1f, 1f, 1f, 1f }; // 环境光参数 float[] fLightDiffuse = new float[4] { 1f, 1f, 1f, 1f }; // 漫射光参数 bool multitexturing = true; public Form1() { InitializeComponent(); } private void openGLControl_OpenGLInitialized(object sender, EventArgs e) { OpenGL gl = openGLControl.OpenGL

6、事例六:裁剪变换(ClipPlane)

狂风中的少年 提交于 2019-11-27 10:07:05
namespace sharpGLTest06 { public partial class SharpGLForm : Form { public SharpGLForm() { InitializeComponent(); } private void openGLControl_OpenGLDraw(object sender, RenderEventArgs e) { OpenGL gl = openGLControl.OpenGL; gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.LoadIdentity(); double[] eqn = new double[4] { 1f, 0f, 1f, 0f }; //白色 gl.Color(1.0, 1.0, 1.0); //建立模型堆栈,将当前位置保存起来(入栈) /* 详解 * 当你做一些移动或旋转等变换后,使用glPushMatrix(),OpenGL会把这个变换后的位置和角度保存起来; * 然后你再随便坐第二次移动或旋转变换,再用glPopMatrix(),OpenGL就会把刚刚保存的那个位置和角度恢复; * 消除上一次变换对本次变换的影响 * */ gl.PushMatrix(); { gl.Translate(2, -2,