Wire-Frame 3D Graphics Accelerator IP Core. C Library Specification

Similar documents
COMS 4160: Problems on Transformations and OpenGL

Geometry: Outline. Projections. Orthographic Perspective

1 Transformations. Chapter 1. Transformations. Department of Computer Science and Engineering 1-1

Advanced Computer Graphics (CS & SE )

Spring 2013, CS 112 Programming Assignment 2 Submission Due: April 26, 2013

Precept 2 Aleksey Boyko February 18, 2011

CIS 636 Interactive Computer Graphics CIS 736 Computer Graphics Spring 2011

1 (Practice 1) Introduction to OpenGL

CS380: Computer Graphics Viewing Transformation. Sung-Eui Yoon ( 윤성의 ) Course URL:

Computer Viewing. Prof. George Wolberg Dept. of Computer Science City College of New York

The Viewing Pipeline adaptation of Paul Bunn & Kerryn Hugo s notes

Getting Started. Overview (1): Getting Started (1): Getting Started (2): Getting Started (3): COSC 4431/5331 Computer Graphics.

Viewing Transformation

COMP Computer Graphics and Image Processing. 5: Viewing 1: The camera. In part 1 of our study of Viewing, we ll look at ˆʹ U ˆ ʹ F ˆʹ S

The Graphics Pipeline and OpenGL I: Transformations!

Describe the Orthographic and Perspective projections. How do we combine together transform matrices?

CSE328 Fundamentals of Computer Graphics

3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing

Fundamental Types of Viewing

Android and OpenGL. Android Smartphone Programming. Matthias Keil. University of Freiburg

COMP3421. Introduction to 3D Graphics

CSE528 Computer Graphics: Theory, Algorithms, and Applications

COMP3421. Introduction to 3D Graphics

CITSTUDENTS.IN VIEWING. Computer Graphics and Visualization. Classical and computer viewing. Viewing with a computer. Positioning of the camera

COMP3421. Introduction to 3D Graphics

CS354 Computer Graphics Viewing and Modeling

Computer Viewing Computer Graphics I, Fall 2008

Computer Graphics. Basic 3D Programming. Contents

Computer Graphics. Lecture 04 3D Projection and Visualization. Edirlei Soares de Lima.

Lecture 9 Sections 2.6, 5.1, 5.2. Wed, Sep 16, 2009

The Graphics Pipeline and OpenGL I: Transformations!

CS 4204 Computer Graphics

Virtual Cameras and The Transformation Pipeline

Overview. By end of the week:

Overview. Viewing and perspectives. Planar Geometric Projections. Classical Viewing. Classical views Computer viewing Perspective normalization

Computer Graphics. Bing-Yu Chen National Taiwan University

Rasterization Overview

part 3 Martin Samuelčík Room I4

OpenGL Transformations

Computer Graphics. Chapter 10 Three-Dimensional Viewing

MORE OPENGL. Pramook Khungurn CS 4621, Fall 2011

SFU CMPT 361 Computer Graphics Fall 2017 Assignment 2. Assignment due Thursday, October 19, 11:59pm

Introduction to OpenGL Transformations, Viewing and Lighting. Ali Bigdelou

The View Frustum. Lecture 9 Sections 2.6, 5.1, 5.2. Robb T. Koether. Hampden-Sydney College. Wed, Sep 14, 2011

Notes on Assignment. Notes on Assignment. Notes on Assignment. Notes on Assignment

Wire-Frame 3D Graphics Accelerator IP Core. Specification

Three-Dimensional Graphics III. Guoying Zhao 1 / 67

Viewing COMPSCI 464. Image Credits: Encarta and

Fachhochschule Regensburg, Germany, February 15, 2017

CSC 470 Computer Graphics. Three Dimensional Viewing

Transformation Pipeline

EXAMINATIONS 2017 TRIMESTER 2

CSC 470 Computer Graphics

1 OpenGL - column vectors (column-major ordering)

Transformations (Rotations with Quaternions) October 24, 2005

2D and 3D Viewing Basics

Lecture 4. Viewing, Projection and Viewport Transformations

Today. Rendering pipeline. Rendering pipeline. Object vs. Image order. Rendering engine Rendering engine (jtrt) Computergrafik. Rendering pipeline

CSE 167: Introduction to Computer Graphics Lecture #5: Projection. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2017

CS559: Computer Graphics. Lecture 12: OpenGL Transformation Li Zhang Spring 2008

For each question, indicate whether the statement is true or false by circling T or F, respectively.

CS 112 The Rendering Pipeline. Slide 1

3D Viewing. With acknowledge to: Ed Angel. Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico

Graphics pipeline and transformations. Composition of transformations

2D TRANSFORMATIONS AND MATRICES

The Graphics Pipeline and OpenGL IV: Stereo Rendering, Depth of Field Rendering, Multi-pass Rendering!

CSC Graphics Programming. Budditha Hettige Department of Statistics and Computer Science

Overview. By end of the week:

CSC 305 The Graphics Pipeline-1

Projection and viewing. Computer Graphics CSE 167 Lecture 4

CSE 167: Lecture #4: Vertex Transformation. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

Computer Viewing. CITS3003 Graphics & Animation. E. Angel and D. Shreiner: Interactive Computer Graphics 6E Addison-Wesley

CMSC427 Transformations II: Viewing. Credit: some slides from Dr. Zwicker

Rendering Objects. Need to transform all geometry then

API for creating a display window and using keyboard/mouse interations. See RayWindow.cpp to see how these are used for Assignment3

Lecture 3 Sections 2.2, 4.4. Mon, Aug 31, 2009

Introduction to OpenGL

CS 464 Review. Review of Computer Graphics for Final Exam

Chapter 3 - Basic Mathematics for 3D Computer Graphics

Beginning Direct3D Game Programming: 6. First Steps to Animation. Division of Digital Contents, DongSeo University.

CSCI 4620/8626. The 2D Viewing Pipeline

Models and The Viewing Pipeline. Jian Huang CS456

CSE452 Computer Graphics

Lecture 4 of 41. Lab 1a: OpenGL Basics

Viewing with Computers (OpenGL)

One or more objects A viewer with a projection surface Projectors that go from the object(s) to the projection surface

Matrix-Rechnung I ' z =... Universität Frankfurt

Order of Transformations

Virtual Cameras & Their Matrices

7. 3D Viewing. Projection: why is projection necessary? CS Dept, Univ of Kentucky

Computer Science 426 Midterm 3/11/04, 1:30PM-2:50PM

EXAMINATIONS 2016 TRIMESTER 2

CS 4620 Program 3: Pipeline

Mobile Application Programming: Android. OpenGL ES 3D

Surface Graphics. 200 polys 1,000 polys 15,000 polys. an empty foot. - a mesh of spline patches:

SUMMARY. CS380: Introduction to Computer Graphics Projection Chapter 10. Min H. Kim KAIST School of Computing 18/04/12. Smooth Interpolation

Transformations. Rotation and Scaling

Visualizing Molecular Dynamics

Game Architecture. 2/19/16: Rasterization

3D Mathematics. Co-ordinate systems, 3D primitives and affine transformations

Transcription:

Wire-Frame 3D Graphics Accelerator IP Core C Library Specification Kenji Ishimaru <info.wf3d@gmail.com> 1 / 29

Revision History Rev. Date Author Description 1.0 2015/09/30 Kenji Ishimaru First release 1.1 2016/08/14 Kenji Ishimaru Change email address 2 / 29

Contents 1 Introduction... 5 1-1 File List... 5 2 Parameters... 6 2-1 Matrix Stack Size... 6 2-2 Buffer Address... 6 2-3 Hardware Dependent... 6 3 API List... 8 3-1 3D Graphics Core API... 8 3-2 Helper API... 8 3-3 mpmatrixmode... 9 3-4 mppushmatrix... 10 3-5 mppopmatrix... 11 3-6 mploadidentity... 12 3-7 mptranslate... 13 3-8 mprotate... 14 3-9 mpscale... 15 3-10 mpviewport... 16 3-11 mpfrustum... 17 3-12 mportho... 18 3-13 mpperspective... 19 3-14 mplookat... 20 3-15 mpvertexpointer... 21 3-16 mpdrawarrays... 22 3-17 mprendercolor... 23 3-18 mprendercoloru... 24 3-19 mpclearcolor... 25 3-20 mpclear... 26 3-21 mpswapbuffers... 27 4 Examples... 28 3 / 29

4-1 Simple Cube Rendering... 28 4 / 29

1 Introduction This document describes C Application Programming Interface (API) for Wire-Fame 3D graphics Accelerator IP Core. The API makes it easy to generate Model-View and Projection matrices, and makes it easy to handle 3D rendering process. 1-1File List 1-1-1Common Files File Name Directory Description mp_lib.h clib/hw_dep Graphics API implementation mp_lib.c mp_matrix3.h clib 3x3 matrix utility mp_matrix3.c mp_matrix4.h 4x4 matrix utility mp_matrix4.c mp_vector3.h 3-element vector utility mp_vector3.c mp_vector4.h 4-element vector utility mp_vector4.c 1-1-2Hardware Dependent Files File Name Description mp_hwdep.h hardware-dependent function mp_hwdep.c 5 / 29

2Parameters 2-1Matrix Stack Size define name file default value MP_CONFIG_MAX_MSTACK mp_lib.c 8 MP_CONFIG_MAX_MSTACK specifies the size of the matrix stack. mppushmatrix pushes a matrix to the stack, and mppopmatrix pops a matrix form the stack. Note that Model-View matrix and Projection matrix shares same matrix stack. 2-2Buffer Address define name file Description FRAME_BUFFER_0 mp_hwdep.h Frame Buffer0 top Address FRAME_BUFFER_1 Frame Buffer1 top Address 3D graphics rendering typically uses double frame buffers (front and back buffers). The one is assigned to 3D graphics rendering, and the other is assigned to LCD controller to displaying previous rendering result. Each buffer should have enough space to allocate maximum screen size. For example, if the screen size is VGA(640x480), each buffer has space at least 0x4b000 byte. 2-3Hardware Dependent The top address of the IP Core is system dependent. All the register addresses in the IP Core is defined by offset from the top address. For further details about each register, please refer Wire-Frame 3D Graphics Accelerator IP Core Specification. define name offset from register address top D3D_DMA_START 0x00 D3D_DMA_STATUS 0x04 D3D_DMA_ADRS 0x08 D3D_DMA_SIZE 0x0c D3D_MATRIX_M00 0x10-0x4c 6 / 29

D3D_MATRIX_M33 D3D_FSCR_W D3D_FSCR_H D3D_ISCR_W_M1 D3D_ISCR_H_M1 D3D_ISCR_W D3D_COL_ADRS D3D_COL_VAL 0x50 0x54 0x58 0x5c 0x60 0x64 0x68 7 / 29

3API List 3-13D Graphics Core API Name Description mpmatrixmode specify current matrix mode mppushmatrix push the current matrix stack mppopmatrix pop the current matrix stack mpmultmatrix multiply the current matrix by an arbitrary matrix mploadidentity set the current matrix with the identity matrix mptranslate multiply the current matrix by a translation matrix mprotate multiply the current matrix by a rotation matrix mpscale multiply the current matrix by a general scaling matrix mpviewport set the viewport mpfrustum multiply a perspective matrix mportho multiply an orthographic matrix mpperspective set up a perspective projection matrix mplookat define a viewing matrix mpvertexpointer define an array of vertex data mpdrawarrays render triangles from array data mprendercolor set the current render color mprendercoloru set the current render color by unsigned byte 3-2Helper API Name mpclearcolor mpclear mpswapbuffers Description specify clear values for the frame buffer clear frame buffer (back buffer) exchange front and back buffers 8 / 29

3-3mpMatrixMode 3-3-1C Specification void mpmatrixmode(enum mode) 3-3-2Parameters Parameter Description mode current matrix for subsequent matrix operations. Two values are accepted: MP_MODELVIEW and MP_PROJECTION. 3-3-3Description mode can assume one of two values: MP_MODELVIEW Applies subsequent matrix operations to the modelview matrix. MP_PROJECTION Applies subsequent matrix operations to the projection matrix. 3-3-4Notes None 3-3-5Examples mpmatrixmode(mp_modelview); mpmatrixmode(mp_projection); 9 / 29

3-4mpPushMatrix 3-4-1C Specification void mppushmatrix(void) 3-4-2Parameters None 3-4-3Description mppushmatrix pushes the current matrix to the matrix stack. The only one current matrix exists. This means that mpmatrixmode call between mppushmatrix and mppopmatrix is unsupported. 3-4-4Notes mppushmatrix to the full stack is ignored. 3-4-5Examples mppushmatrix() : (some matrix operation, mptranslate(), mprotate(), etc.) mppopmatrix() 10 / 29

3-5mpPopMatrix 3-5-1C Specification void mppopmatrix(void) 3-5-2Parameters None 3-5-3Description The only one current matrix exists. This means that mpmatrixmode call between mppushmatrix and mppopmatrix is unsupported. 3-5-4Notes The behavior of empty stack pop is undefined. 3-5-5Examples mppushmatrix() : (some matrix operation, mptranslate, mprotate, etc.) mppopmatrix() 11 / 29

3-6 mploadidentity 3-6-1 C Specification void mploadidentity(void) 3-6-2 Parameters None 3-6-3 Description mploadidentity replaces the current matrix with the identity matrix. 1 0 0 0 0 1 0 0 current matrix = ( ) 0 0 1 0 0 0 0 1 3-6-4 Notes None 3-6-5 Examples mploadidentity(); 12 / 29

3-7 mptranslate 3-7-1C Specification void mptranslate(float x, float y, float z); 3-7-2Parameters parameter x,y,z Description x, y, and z coordinates of a translation vector. 3-7-3Description mptranslate translates current matrix by x y z. The operation is: m 00 m 01 m 02 m 03 m 10 m 11 m 12 m 13 CurrentMatrix = ( m 20 m 21 m 22 m ) 23 m 30 m 31 m 32 m 33 tx x ty y ( ) = CurrentMatrix ( ) zt z tw 1 m 00 m 01 m 02 tx m CurrentMatrix = ( 10 m 11 m 12 ty m 20 m 21 m 22 tz ) m 30 m 31 m 32 m 33 3-7-4Notes None 3-7-5Examples mptranslate(1.0, 2.0, 0.0); 13 / 29

3-8mpRotate 3-8-1C Specification void mprotate(float angle, float x, float y, float z); 3-8-2Parameters Parameter angle x,y,z Description angle of rotation, in degrees. x, y, and z coordinates of a vector. 3-8-3Description mprotate produces a rotation of angle degrees around the vector x,y,z. The operation is: θ = angle/π RotateMatrix x 2 (1 cos θ) + cosθ xy(1 cosθ) zsinθ xz(1 cosθ) + ys 0 = ( yx(1 cosθ) + zsinθ y 2 (1 cosθ) + cosθ yz(1 cosθ) xsinθ 0 ) xz(1 cosθ) ysinθ yz(1 cosθ) + xsinθ z 2 (1 cosθ) + cosθ 0 0 0 0 1 CurrentMatrix = CurrentMatrix RorateMatrix 3-8-4Notes None 3-8-5Examples mprotate(90, 0, 1, 0); // rotate 90 degree around y axis 14 / 29

3-9mpScale 3-9-1C Specification void mpscale(float x, float y, float z); 3-9-2Parameters Parameter x,y,z Description scale factors along the x, y, and z axes 3-9-3Description mpscale produces a nonuniform scaling along the x, y, and z axes. The operation is: m 00 m 01 m 02 m 03 m 10 m 11 m 12 m 13 CurrentMatrix = ( m 20 m 21 m 22 m ) 23 m 30 m 31 m 32 m 33 x 0 0 0 0 y 0 0 CurrentMatrix = CurrentMatrix ( ) 0 0 z 0 0 0 0 1 3-9-4Notes None 3-9-5Examples mpscale(2.0,2.0,2.0); 15 / 29

3-10mpViewPort 3-10-1C Specification void mpviewport(int width, int height) 3-10-2Parameters Parameter width, height Description Specify the width and height of the viewport. 3-10-3Description mpviewport specifies the transformation of x and y from normalized device coordinates to window coordinates. The operation is: Where: x w = (x nd + 1) width 2 y w = (y nd + 1) heigh 2 x nd, y nd : normalized device coordinates x w, y w : window coordinates 3-10-4Note Viewport transformation is calculated in the IP Core. 3-10-5Examples mpviewport(640,480); // VGA size 16 / 29

3-11 mpfrustum 3-11-1C Specification void mpfrustum(float left, float right, float bottom, float top, float nearval, float farval); 3-11-2Parameters Parameter Description left, right The coordinates for the left and right vertical clipping planes. bottom, top The coordinates for the bottom and top horizontal clipping planes. nearval, farval The distances to the near and far depth clipping planes. 3-11-3Description mpfrustum produces a perspective projection matrix. The operation is: ProjMatrix = 2nearVal right left 0 0 2nearVal top bottom right+left right left top+bottom top bottom 0 0 farval+nearval 2farValnearVal farval nearval farval nearval ( 0 0 1 0 ) CurrentMatrix = CurrentMatrix ProjMatrix 0 0 3-11-4Notes None 3-11-5Examples mpfrustum is called in mpperspective mpperspective(30.0, 4.0 / 3.0, 1, 100); 17 / 29

3-12mpOrtho 3-12-1C Specification void mportho(float left, float right, float bottom, float top, float nearval, float farval); 3-12-2Parameters Parameter Description left, right The coordinates for the left and right vertical clipping planes. bottom, top The coordinates for the bottom and top horizontal clipping planes. nearval, farval The distances to the near and far depth clipping planes. 3-12-3Description mportho produces a parallel projection matrix. The operation is: ProjMatrix = 2 right left 0 0 0 2 top bottom 0 2 right+left right left top+bottom top bottom nearval+farval farval nearval 0 0 farval nearval ( 0 0 0 1 ) CurrentMatrix = CurrentMatrix ProjMatrix 3-12-4Notes None 3-12-5Examples 18 / 29

3-13mpPerspective 3-13-1C Specification void mpperspective(float fovy, float aspect, float znear, float zfar) 3-13-2Parameters Parameter Description fovy The field of view angle in degrees,in the y direction. aspect The aspect ratio that determines the field of view in the x direction. znear The distance from the viewer to the near clipping plane zfar The distance from the viewer to the far clipping plane 3-13-3Description mpperspective specifies a viewing frustum into the world coordinate system. The aspect ratio in mpperspective should match the aspect ratio of mpviewport. The operation is: ymax = znear tan ( fovy π ) 360 xmax = ymax aspect mpfrustumf(-xmax, xmax, -ymax, ymax, znear, zfar); 3-13-4Notes None 3-13-5Examples mpperspective(30.0, 4.0 / 3.0, 1, 100); 19 / 29

3-14mpLookAt 3-14-1C Specification void mplookat(float eyex, float eyey, float eyez, float centerx, float centery, float centerz, float upx, float upy, float upz); 3-14-2Parameters Parameter eyex, eyey, eyez centerx, centery, centerz upx, upy, upz Description The position of the eye point The position of the reference point The direction of the up vector 3-14-3Description mplookat creates a viewing matrix derived from an eye point, a reference point indicating the center of the scene, and an UP vector. The operation is: s. x u. x f. x 0 s. y u. y f. y 0 M = ( ) s. z u. z f. z 0 0 0 0 1 CurrentMatrix = CurrentMatrix M mptranslate(-eyex,-eyey,-eyez) Where: f. x = (centerx eyex), f. y = (centery eyey), f. z = (centerz eyez) u. x = upx, u. y = upy, u. z = upz s = f u, u = s f (cross-product) 3-14-4Notes None 3-14-5Examples mplookat(0, 0, 1, 0, 0, 0, 0, 1, 0); // eye=(0,1,0),up vector is Y axis 20 / 29

3-15mpVertexPointer 3-15-1C Specification void mpvertexpointer(float *pointer) 3-15-2Parameters Parameter Description Pointer A pointer to the first coordinates of the first vertex in the array. 3-15-3Description mpvertexpointer specifies the location of vertex data. 3-15-4Notes float array is only supported. A vertex is constructed with 3 float elements(x,y,z, w is not including). 3-15-5Examples float vtx_array[] = { // face 0 // v0 0.147587, 0.067877, 0.065864, : }; mpvertexpointer(3, vtx_array); 21 / 29

3-16mpDrawArrays 3-16-1C Specification void mpdrawarrays(int count); 3-16-2Parameters Parameter Description count The number of triangle indices of the arrays. For example, 2 triangles would be 6 3-16-3Description mpdrawarrays starts rendering. In mpdrawarrays, the IP Core reads the number of counts triangle vertices from the vertex pointer, which is set by mpvertexpointer. 3-16-4Notes mpdrawarrays is a blocking function. The program does not execute the next code until current rendering prosess would be finished. 3-16-5Examples mpdrawarrays(36); // render 12 triangles 22 / 29

3-17mpRenderColor 3-17-1C Specification void mprendercolor(float red, float green, float blue); 3-17-2Parameters Parameter red,green,blue Description red, green and blue values for the wire-frame line color. 3-17-3Description mprendercolor specifies line color for the wire-frame rendering. Each elements of the floating fomat color value is converted to 8-bit color value. The color operation is: r = (int)(red*255.0); g = (int)(green*255.0); b = (int)(blue*255.0); color_8bit = ((r & 0x3) << 6) ((g & 0x7) << 3) (b & 0x7); // rgb = 2:3:3 3-17-4Notes 8-bit color is only supported. Each RGB bits of a pixel is 2:3:3. 3-17-5Examples mprendercolor(1.0,0.0,0.0); // pixel color = RED 23 / 29

3-18mpRenderColorU 3-18-1C Specification void mprendercoloru(int color); 3-18-2Parameters Parameter color Description 8-bit color value for the wire-frame line color. 3-18-3Description mprendercoloru specifies 8-bit line color for wire-frame line rendering. 3-18-4Notes 8-bit color and the bit assign of RGB elements are system dependent. 3-18-5Examples // When the system mapped 8-bit color as RGB=2:3:3 mprendercoloru(0xff); // white mprendercoloru(0xc0); // red mprendercoloru(0x38); // blue mprendercoloru(0x07); // green 24 / 29

3-19mpClearColor 3-19-1C Specification void mpclearcolor(float red, float green, float blue) 3-19-2Parameters Parameter red, green, blue Description red, green and blue values used when the frame buffer is cleared. 3-19-3Description mpclearcolor specifies the red, green and blue values used by mpclear to clear the frame buffer (back buffer). 3-19-4Notes The 3D Graphics IP Core does not have any buffer clear feature. 3-19-5Examples mpclearcolor(0.5, 0, 0.4); // R=0.5, G=0, B=0.4 25 / 29

3-20mpClear 3-20-1C Specification void mpclear(void) 3-20-2Parameters None 3-20-3Description mpclear fills the frame buffer (back buffer) by the color specified by mpclearcolor. 3-20-4Notes The IP Core does not have any buffer clear feature. mpclear() would be implementaed by the system prosessor or system DMAC. 3-20-5Examples mpclear(); // clear current(front) frame buffer 26 / 29

3-21mpSwapBuffers 3-21-1C Specification void mpswapbuffers(void) 3-21-2Parameters None 3-21-3Description mpswapbuffers exchanges front and back buffers. 3-21-4Notes Frame buffer top address register of the IP Core is set front or back in mpswapbuffers. 3-21-5Examples mpswapbuffers(); 27 / 29

4Examples 4-1Simple Cube Rendering float triangle[] = { // front 0.25, 0.25, 0.25, -0.25, 0.25, 0.25, -0.25, -0.25, 0.25, // triangle0 0.25, 0.25, 0.25, -0.25, -0.25, 0.25, 0.25, -0.25, 0.25, // triangle1 // top 0.25, 0.25, 0.0, -0.25, 0.25, 0.0, -0.25, 0.25, 0.25, // triangle0 0.25, 0.25, 0.0, -0.25, 0.25, 0.25, 0.25, 0.25, 0.25, // // triangle1 // bottom 0.25, -0.25, 0.25, -0.25, -0.25, 0.25, -0.25, -0.25, 0, // triangle0 0.25, -0.25, 0.25, -0.25, -0.25, 0, 0.25, -0.25, 0, // // triangle1 // left -0.25, 0.25, 0.25, -0.25, 0.25, 0, -0.25, -0.25, 0, // triangle0-0.25, 0.25, 0.25, -0.25, -0.25, 0, -0.25, -0.25, 0.25, // triangle1 // right 0.25, 0.25, 0, 0.25, 0.25, 0.25,0.25, -0.25, 0.25, // triangle0 0.25, 0.25, 0, 0.25, -0.25, 0.25, 0.25, -0.25, 0, // triangle1 // back -0.25, 0.25, 0, 0.25, 0.25, 0, 0.25, -0.25, 0, // triangle0-0.25, 0.25, 0, 0.25, -0.25, 0, -0.25, -0.25, 0// triangle1 }; void mp_loop() { int i; int frame = 0; mpclearcolor(0.1, 0.1, 0.1, 1.0); mpviewport(0, 0, 640, 480); mpmatrixmode(mp_projection); mpperspective(30.0, 4.0 / 3.0, 1, 100); mpvertexpointer(4, triangle); while(1) { for (i = 0; i <360; i++) { printf("frame %d n",frame++); mpclear(); mpmatrixmode(mp_modelview); mploadidentity(); mplookat(0, 0, 1, 0, 0, 0, 0, 1, 0); mptranslate(0, 0, -2); mprotate(i, 1, 0, 0); mprotate(i, 0, 0, 1); mpdrawarrays( 36); } } } mpswapbuffers (); 28 / 29

int main() { mpinit(); mp_loop(); } return 0; 29 / 29