Code covered by the BSD License  

Highlights from
OpenGL .NET Examples

image thumbnail
from OpenGL .NET Examples by Dirk-Jan Kroon
Matlab OpenGL .NET code and examples for R2009a and above

CamLight_Cube_Painters(id)
function CamLight_Cube_Painters(id)
% Function is written by D.Kroon University of Twente (April 2009)


% Allow to use GL functions without prefixing with Tao.Opengl.
import Tao.OpenGl.*

% Set background clear color to blue            
Gl.glClearColor(0.2, 0.2, 0.2, 0.0);  

% Clear the color and depth buffer
Gl.glClear(int32(bitor(uint32(Gl.GL_COLOR_BUFFER_BIT),uint32(Gl.GL_DEPTH_BUFFER_BIT)))); 

% Set depth testing enabled
Gl.glEnable(Gl.GL_DEPTH_TEST)  

cornersx=[-1  1 -1  1 -1  1 -1  1];
cornersy=[-1 -1  1  1 -1 -1  1  1];
cornersz=[-1 -1  -1 -1  1  1  1  1];

% Enable Light
Gl.glEnable(Gl.GL_LIGHTING);
% Vector for light position (directional light - try a positional one)

% Get Projection matrix in array of length 16
projmatrix = NET.createArray('System.Single', 16);
Gl.glGetFloatv(Gl.GL_PROJECTION_MATRIX,projmatrix);
% Reshape to 4x4 matrix
projmatrix=reshape(double(projmatrix),[4 4]);
% Use the inverse projection matrix to get the light fixed with the camera
LightPosCam=(projmatrix)\[0.3 0.5 -0.6 0]';

LightPos= NET.convertArray(LightPosCam, 'System.Single', 4);
Ambient =  NET.convertArray([0.1 0.1 0.1 1], 'System.Single', 4); 
Diffuse=  NET.convertArray([0.6 0.6 0.6 1], 'System.Single', 4); 
Specular=  NET.convertArray([0.3 0.3 0.3 1], 'System.Single', 4); 

% Turn on Lighting
Gl.glEnable(Gl.GL_LIGHTING);
Gl.glEnable(Gl.GL_LIGHT0);

Gl.glLightfv(Gl.GL_LIGHT0,Gl.GL_POSITION,LightPos);
Gl.glLightfv(Gl.GL_LIGHT0,Gl.GL_AMBIENT,Ambient);
Gl.glLightfv(Gl.GL_LIGHT0,Gl.GL_DIFFUSE,Diffuse);
Gl.glLightfv(Gl.GL_LIGHT0,Gl.GL_SPECULAR,Specular);

% Constant attenuation (for distance, etc.)
% Only works for fixed light locations!  Otherwise disabled
Gl.glLightf(Gl.GL_LIGHT0, Gl.GL_CONSTANT_ATTENUATION, 1.0);
Gl.glLightf(Gl.GL_LIGHT0, Gl.GL_LINEAR_ATTENUATION, 0.0);
Gl.glLightf(Gl.GL_LIGHT0, Gl.GL_QUADRATIC_ATTENUATION, 0.0);
Gl.glLightModeli(Gl.GL_LIGHT_MODEL_LOCAL_VIEWER, Gl.GL_TRUE);

% Normalize vectors
Gl.glEnable(Gl.GL_NORMALIZE);

% Enable ColorMaterial
Gl.glEnable (Gl.GL_COLOR_MATERIAL ) ;
% Set the Material Properties
floor_ambient = NET.convertArray([0, 0, 0.3 1.0 ], 'System.Single', 4); 
floor_diffuse = NET.convertArray([0.3, 0.3, 0.3, 1.0 ], 'System.Single', 4); 
floor_specular= NET.convertArray([0.7,0.3,0.3, 1 ], 'System.Single', 4);
floor_emission= NET.convertArray([0.2,0.0,0.0, 1 ], 'System.Single', 4);
floor_shininess = 10;
Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_AMBIENT, floor_ambient);
Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_DIFFUSE, floor_diffuse);
Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SPECULAR, floor_specular);
Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SHININESS, floor_shininess);
Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_EMISSION, floor_emission);

% Gourang shanding
Gl.glShadeModel(Gl.GL_SMOOTH);

% Specular color enable
Gl.glLightModeli(Gl.GL_LIGHT_MODEL_COLOR_CONTROL,Gl.GL_SEPARATE_SPECULAR_COLOR);

Gl.glBegin(Gl.GL_QUADS);
    % 1e Face
    % Fill color yellow
	Gl.glColor4f(1.0, 1.0, 0.0, 1);
    Gl.glNormal3f(0,0,-1);
    Gl.glVertex3f(cornersx(1), cornersy(1), cornersz(1));
    Gl.glNormal3f(0,0,-1);
    Gl.glVertex3f(cornersx(2), cornersy(2), cornersz(2));				
    Gl.glNormal3f(0,0,-1);
    Gl.glVertex3f(cornersx(4), cornersy(4), cornersz(4));				
    Gl.glNormal3f(0,0,-1);
    Gl.glVertex3f(cornersx(3), cornersy(3), cornersz(3));		
    
    % 2e Face
    Gl.glNormal3f(0,0,1);
    Gl.glVertex3f(cornersx(7), cornersy(7), cornersz(7));				
    Gl.glNormal3f(0,0,1);
    Gl.glVertex3f(cornersx(8), cornersy(8), cornersz(8));				
    Gl.glNormal3f(0,0,1);
    Gl.glVertex3f(cornersx(6), cornersy(6), cornersz(6));				
    Gl.glNormal3f(0,0,1);
    Gl.glVertex3f(cornersx(5), cornersy(5), cornersz(5));

    % 3e Face
    Gl.glNormal3f(0,-1,0);
    Gl.glVertex3f(cornersx(1), cornersy(1), cornersz(1));				
    Gl.glNormal3f(0,-1,0);
    Gl.glVertex3f(cornersx(5), cornersy(5), cornersz(5));				
    Gl.glNormal3f(0,-1,0);
    Gl.glVertex3f(cornersx(6), cornersy(6), cornersz(6));				
    Gl.glNormal3f(0,-1,0);
    Gl.glVertex3f(cornersx(2), cornersy(2), cornersz(2));
    
    % 4e Face
    Gl.glNormal3f(0,1,0);
    Gl.glVertex3f(cornersx(3), cornersy(3), cornersz(3));	
    Gl.glNormal3f(0,1,0);
    Gl.glVertex3f(cornersx(4), cornersy(4), cornersz(4));				
    Gl.glNormal3f(0,1,0);
    Gl.glVertex3f(cornersx(8), cornersy(8), cornersz(8));				
    Gl.glNormal3f(0,1,0);
    Gl.glVertex3f(cornersx(7), cornersy(7), cornersz(7));
    
    % 5e Face
    Gl.glNormal3f(-1,0,0);
    Gl.glVertex3f(cornersx(3), cornersy(3), cornersz(3));				
    Gl.glNormal3f(-1,0,0);
    Gl.glVertex3f(cornersx(1), cornersy(1), cornersz(1));				
    Gl.glNormal3f(-1,0,0);
    Gl.glVertex3f(cornersx(5), cornersy(5), cornersz(5));				
    Gl.glNormal3f(-1,0,0);
    Gl.glVertex3f(cornersx(7), cornersy(7), cornersz(7));

    % 6e Face
    Gl.glNormal3f(1,0,0);
    Gl.glVertex3f(cornersx(4), cornersy(4), cornersz(4));				
    Gl.glNormal3f(1,0,0);
    Gl.glVertex3f(cornersx(2), cornersy(2), cornersz(2));				
    Gl.glNormal3f(1,0,0);
    Gl.glVertex3f(cornersx(6), cornersy(6), cornersz(6));				
    Gl.glNormal3f(1,0,0);
    Gl.glVertex3f(cornersx(8), cornersy(8), cornersz(8));

Gl.glEnd(); 

% Disable Light
Gl.glDisable(Gl.GL_COLOR_MATERIAL ) ;
Gl.glDisable(Gl.GL_LIGHT0);
Gl.glDisable(Gl.GL_LIGHTING);


% Flush the pipeline, update the graphics buffer
Gl.glFlush();


Contact us at files@mathworks.com