public uint SetImage(uint width, uint height, IntPtr ptr) { Width = width; Height = height; // Bind our texture object (make it the current texture). Device.BindTexture(OpenGL.GL_TEXTURE_2D, textureObject); Device.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); Device.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); Device.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, OpenGL.GL_RGBA, (int)Width, (int)Height, OpenGL.GL_RGBA, OpenGL.GL_UNSIGNED_BYTE, ptr); return(textureObject); }
public void SetTextures(OpenGL gl) { gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_NEAREST); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_NEAREST); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); Bitmap image = new Bitmap(m_textureFiles[i]); image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); //ova metoda pravi mipmape, ne smao jednu teksturu //gl.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, (int)OpenGL.GL_RGB8, image.Width, image.Height, 0, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); image.UnlockBits(imageData); image.Dispose(); } }
private void LoadTexture(OpenGL gl) { gl.Enable(OpenGL.GL_TEXTURE_2D); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); Bitmap image = new Bitmap(m_textureFiles[i]); image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); BitmapData imageData = image.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); image.UnlockBits(imageData); image.Dispose(); } }
/// <summary> /// Load textures into m_textures variable. /// </summary> private void LoadTextures(OpenGL gl) { gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); // TODO 7: Fusion mode gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Assign texture to its identifier gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); Bitmap image = new Bitmap(m_textureFiles[i]); // Rotate image because of OpenGl coordinate system image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); BitmapData imageData = image.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); //TODO 7 - wrapping, filters, texture fusion with material gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); //Texture wraping gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); //Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); image.UnlockBits(imageData); image.Dispose(); } }
private void PodesiTeksture(OpenGL gl) { // Predji u rezim rada sa 2D teksturama gl.Enable(OpenGL.GL_TEXTURE_2D); // Teksture se primenjuju sa parametrom modulate gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); // Ucitaj slike i kreiraj teksture gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); // Posto je kreirana tekstura slika nam vise ne treba image.UnlockBits(imageData); image.Dispose(); } }
private void FormTexture(OpenGL gl) { gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); //kreira N tekstura odjednom (mipmap) gl.GenTextures(2, m_textures); for (int i = 0; i < 2; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); //filtriranje teksture koje se primenjuje u slucaju da se tekstura mora smanjiti da bi bila pridruzena obj je LINEAR gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); image.UnlockBits(imageData); image.Dispose(); } }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { // Model sencenja na flat (konstantno) //gl.ShadeModel(OpenGL.GL_FLAT); gl.ShadeModel(OpenGL.GL_SMOOTH); //ukljuceno testiranje dubine gl.Enable(OpenGL.GL_DEPTH_TEST); //sakrivanje nevidljiv povrsina gl.Enable(OpenGL.GL_CULL_FACE); //color tracking gl.Enable(OpenGL.GL_COLOR_MATERIAL); //ambientalna i difuzna komponenta gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); //automatska normalizacija gl.Enable(OpenGL.GL_NORMALIZE); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.TexGen(OpenGL.GL_S, OpenGL.GL_TEXTURE_GEN_MODE, OpenGL.GL_SPHERE_MAP); gl.TexGen(OpenGL.GL_T, OpenGL.GL_TEXTURE_GEN_MODE, OpenGL.GL_SPHERE_MAP); gl.Enable(OpenGL.GL_TEXTURE_GEN_S); gl.Enable(OpenGL.GL_TEXTURE_GEN_T); // Ucitaj slike i kreiraj teksture gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); // Linear Filtering image.UnlockBits(imageData); image.Dispose(); } //ucitavanje modela m_scene.LoadScene(); m_scene.Initialize(); m_scene2.LoadScene(); m_scene2.Initialize(); }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(1f, 1f, 0f); gl.ShadeModel(OpenGL.GL_FLAT); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_CULL_FACE); gl.FrontFace(OpenGL.GL_CW); //faza 2 : tacka 1 gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); //faza 2 : tacka 2 + tacka 9 SetupLighting(gl); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_DECAL); gl.GenTextures(m_textureCount, m_textures); gl.BindTexture(OpenGL.GL_TEXTURE_2D, 0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_NEAREST); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture System.Drawing.Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Linear Filtering // faza 2 : tacka 3 gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); image.UnlockBits(imageData); image.Dispose(); } m_scene.LoadScene(); m_scene.Initialize(); m_scene2.LoadScene(); m_scene2.Initialize(); m_scene_door.LoadScene(); m_scene_door.Initialize(); }
public void Initialize(OpenGL gl) { gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(0.5f, 0.5f, 0.5f); // Model sencenja na flat (konstantno) gl.ShadeModel(OpenGL.GL_FLAT); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GLU_CULLING); gl.FrontFace(OpenGL.GL_CCW); gl.LoadIdentity(); gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); gl.Enable(OpenGL.GL_LIGHTING); SetupLighting(gl); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { //Pridruzuje se tekstura odredjenom identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_NEAREST); // Nearest Neighbour Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_NEAREST); // Nearest Neighbour Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); //gl.Enable(OpenGL.GL_TEXTURE_GEN_S); //gl.Enable(OpenGL.GL_TEXTURE_GEN_T); image.UnlockBits(imageData); image.Dispose(); } m_scene.LoadScene(); m_scene.Initialize(); m_bullet.LoadScene(); m_bullet.Initialize(); }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { ogl = gl; gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); //gl.Color(0f, 1f, 0f); // Model sencenja na flat (konstantno) gl.ShadeModel(OpenGL.GL_SMOOTH); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_CULL_FACE); gl.Enable(OpenGL.GL_NORMALIZE); gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); // Teksture se primenjuju sa parametrom decal gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); // Ucitaj slike i kreiraj teksture gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.Enable(OpenGL.GL_TEXTURE_GEN_S); gl.Enable(OpenGL.GL_TEXTURE_GEN_T); image.UnlockBits(imageData); image.Dispose(); } m_sceneCont.LoadScene(); m_sceneCont.Initialize(); m_sceneTruck.LoadScene(); m_sceneTruck.Initialize(); }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { gl.Enable(OpenGL.GL_COLOR_MATERIAL); //Uključiti color tracking mehanizam gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); //Ambijentalna i difuzna komponenta materijala // InitLights(gl); //Tackasto, bele boje, gore-levo SetTackasto(gl); SetReflektor(gl); gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(1f, 1f, 1f); // Model sencenja na flat (konstantno) gl.ShadeModel(OpenGL.GL_FLAT); gl.Enable(OpenGL.GL_DEPTH_TEST); //Ukljuceno testiranje dubina //gl.Enable(OpenGL.GL_CULL_FACE_MODE); //Ukljuceno sakrivanje nevidljivih povrsina gl.Enable(OpenGL.GL_CULL_FACE); gl.FrontFace(OpenGL.GL_CCW); //stapanje teksture sa materijalom postaviti da bude GL_DECAL gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_DECAL); //Za teksture podesiti wrapping da bude GL_REPEAT po obema osama //Podesiti filtere za teksture da budu linearno mipmap linearno filtriranje gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); // Linear mipmap Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); // Linear mipmap Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipX); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); image.UnlockBits(imageData); image.Dispose(); } gl.Disable(OpenGL.GL_TEXTURE_2D); m_scene.LoadScene(); //Dartboard m_scene.Initialize(); m_scene2.LoadScene(); //Dart m_scene2.Initialize(); }
public void Initialize(OpenGL gl) { gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(0.5f, 0.5f, 0.5f); gl.ShadeModel(OpenGL.GL_FLAT); if (m_depthTesting) { gl.Enable(OpenGL.GL_DEPTH_TEST); } if (m_culling) { gl.Enable(OpenGL.GLU_CULLING); } gl.FrontFace(OpenGL.GL_CCW); gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); // setupLighting(gl); //setupTargetLight(gl); m_scene.LoadScene(); m_scene.Initialize(); m_strela.LoadScene(); m_strela.Initialize(); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); // Linearno filtriranje gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Linearno filtriranje gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); Bitmap image = new Bitmap(m_textureFiles[i]); image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); image.UnlockBits(imageData); image.Dispose(); } }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { //Prvi deo zadatka // Testiranje dubine - omogucuje da se vidi najkasnije nacrtan objekat UKLJUCENO gl.Enable(OpenGL.GL_DEPTH_TEST); // Cull face mode - sakrivanje nevidljivih povrsina UKLJUCENO gl.Enable(OpenGL.GL_CULL_FACE_MODE); // Color tracking mehanizam gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); gl.Enable(OpenGL.GL_NORMALIZE); gl.Enable(OpenGL.GL_AUTO_NORMAL); // Teksture // Enable ce omoguciti rad sa teksurama gl.Enable(OpenGL.GL_TEXTURE_2D); // Stapanje teksture sa materijalom gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); // Ucitavanje slika i kreiranje tekstura gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; i++) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // Rotiramo sliku zbog koordinatnog sistema OpenGL-a image.RotateFlip(RotateFlipType.Rotate90FlipX); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljava providnost slike) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); //MipMap linearno filtriranje gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Podesavanje Wrapinga da bude GL_REPEAT po obema osama gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); image.UnlockBits(imageData); image.Dispose(); } camera.LoadScene(); camera.Initialize(); animationTimer = new DispatcherTimer(); animationTimer.Interval = TimeSpan.FromMilliseconds(1); animationTimer.Tick += new EventHandler(UpdateAnimation); }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { gl.FrontFace(OpenGL.GL_CCW); gl.Enable(OpenGL.GL_CULL_FACE); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_NEAREST); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_NEAREST); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); /* * gl.Enable(OpenGL.GL_TEXTURE_GEN_S); * gl.Enable(OpenGL.GL_TEXTURE_GEN_T); * * gl.Hint(OpenGL.GL_GENERATE_MIPMAP_SGIS, OpenGL.GL_NICEST); * gl.Hint(OpenGL.GL_PERSPECTIVE_CORRECTION_HINT, OpenGL.GL_NICEST); * gl.Hint(OpenGL.GL_POLYGON_SMOOTH_HINT, OpenGL.GL_NICEST); * gl.Hint(OpenGL.GL_TEXTURE_COMPRESSION_HINT, OpenGL.GL_NICEST); * gl.Hint(OpenGL.GL_LINE_SMOOTH_HINT, OpenGL.GL_NICEST); * gl.Hint(OpenGL.GL_POINT_SMOOTH_HINT, OpenGL.GL_NICEST);*/ image.UnlockBits(imageData); image.Dispose(); } SetupLighting(gl); m_scene.LoadScene(); m_scene.Initialize(); m_scene2.LoadScene(); m_scene2.Initialize(); }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(1f, 0f, 0f); gl.ShadeModel(OpenGL.GL_FLAT); // Testiranje dubine gl.Enable(OpenGL.GL_DEPTH_TEST); // Nevidljive povrsine gl.Enable(OpenGL.GL_CULL_FACE_MODE); gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); gl.Enable(OpenGL.GL_NORMALIZE); gl.Enable(OpenGL.GL_AUTO_NORMAL); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; i++) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); Bitmap image = new Bitmap(m_textureFiles[i]); // Rotiramo sliku zbog koordinatnog sistema OpenGL-a image.RotateFlip(RotateFlipType.Rotate90FlipX); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljava providnost slike) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); //MipMap linearno filtriranje gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Podesavanje Wrapinga da bude GL_REPEAT po obema osama gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); image.UnlockBits(imageData); image.Dispose(); } m_scene.LoadScene(); m_scene.Initialize(); animationTimer = new DispatcherTimer(); animationTimer.Interval = TimeSpan.FromMilliseconds(1); animationTimer.Tick += new EventHandler(ChangeAnimation); }
public void Initialize(OpenGL gl) { //gl.LookAt(m_eyeX, m_eyeY, m_eyeZ, m_centerX, m_centerY, m_centerZ, m_upX, m_upY, m_upZ); gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(1f, 0f, 0f); gl.ShadeModel(OpenGL.GL_FLAT); gl.Enable(OpenGL.GL_CULL_FACE); gl.Enable(OpenGL.GL_DEPTH_TEST); SetupLighting(gl); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); Bitmap image = new Bitmap(m_textureFiles[i]); image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); image.UnlockBits(imageData); image.Dispose(); } lightBulb = new Sphere(); lightBulb.CreateInContext(gl); lightBulb.Radius = 1f; arrow_scene.LoadScene(); arrow_scene.Initialize(); castle_scene.LoadScene(); castle_scene.Initialize(); }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Model sencenja na flat (konstantno) gl.ShadeModel(OpenGL.GL_SMOOTH); //Depth test ukljucen gl.Enable(OpenGL.GL_DEPTH_TEST); //Sakrivanje nevidljivih povrsina gl.Enable(OpenGL.GL_CULL_FACE); //Podesavanje orijentacije poligona gl.FrontFace(OpenGL.GL_CW); //Osvetljenje float[] light0pos = new float[] { 150f, 150f, -45f, 1f }; float[] light0ambient = new float[] { 0.576471f, 0.858824f, 0.439216f, 1.0f }; float[] light0diffuse = new float[] { 0.576471f, 0.858824f, 0.439216f, 1.0f }; float[] light0specular = new float[] { 1.0f, 1.0f, 1.0f, 1.0f }; gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, light0pos); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_AMBIENT, light0ambient); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_DIFFUSE, light0diffuse); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPECULAR, light0specular); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPOT_CUTOFF, 180f); //tackasti svetlosni izvor gl.Enable(OpenGL.GL_LIGHT0); float[] light1pos = new float[] { 40.0f, 1550.0f, -5050.0f, 1f }; float[] light1ambient = new float[] { 1f, 0f, 0f, 1.0f }; float[] light1diffuse = new float[] { 1.0f, 0.0f, 0f, 1.0f }; float[] light1specular = new float[] { 1.0f, 0.0f, 0.0f, 1.0f }; float[] light1direction = new float[] { 40.0f, 43.0f, -5050.0f, 0f }; gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, light1pos); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_DIRECTION, light1direction); //reflektorski izvor svetlosti gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPECULAR, light1specular); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_DIFFUSE, light1diffuse); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, light1ambient); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_CUTOFF, 40f); gl.Enable(OpenGL.GL_LIGHT1); //Ulazak u color tracking rezim gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); //ambijentalna i difuzna komponenta materijala gl.Enable(OpenGL.GL_LIGHTING); gl.Enable(OpenGL.GL_NORMALIZE); //ulazak u rezim rada sa teksturama gl.Enable(OpenGL.GL_TEXTURE_2D); // Ucitaj slike i kreiraj teksture gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); //repeat po obe ose gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_NEAREST); //najblizi sused filtriranje gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_NEAREST); //najblizi sused filtriranje gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); //stapanje teksture sa materijalom image.UnlockBits(imageData); image.Dispose(); } m_scene.LoadScene(); m_scene.Initialize(); }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { // Stavka 1 gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); // Stavka 2 - Tackasti izvor zute boje SetupLighting(gl); sphereLamp = new Sphere(); sphereLamp.CreateInContext(gl); sphereLamp.Radius = 3f; sphereLamp.Material = new SharpGL.SceneGraph.Assets.Material(); //sphereLamp.Material.Emission = Color.LightYellow; sijalica = new Sphere(); sijalica.CreateInContext(gl); sijalica.Radius = 2f; sijalica.Material = new SharpGL.SceneGraph.Assets.Material(); //sijalica.Material.Emission = Color.Red; // Crna pozadina i bela boja za crtanje gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(1f, 1f, 1f); // Model sencenja na flat (konstantno) gl.ShadeModel(OpenGL.GL_FLAT); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_CULL_FACE); gl.FrontFace(OpenGL.GL_CCW); // Stavka 3 - Teksture // Teksture se primenjuju sa parametrom decal gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_DECAL); //Ucitaj slike i kreiraj teksture gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); // Linear mipmap Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR_MIPMAP_LINEAR); // Linear mipmap Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipX); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); image.UnlockBits(imageData); image.Dispose(); } gl.Disable(OpenGL.GL_TEXTURE_2D); m_scene.LoadScene(); //Tabla m_scene.Initialize(); m_scene2.LoadScene(); //Strelica m_scene2.Initialize(); }
/// <summary> /// Korisnicka inicijalizacija i podesavanje OpenGL parametara. /// </summary> public void Initialize(OpenGL gl) { #region osvetljenje gl.Enable(OpenGL.GL_LIGHTING); float[] ambijentalnaKomponenta = { 0.1f, 0.1f, 0.1f, 1.0f }; float[] difuznaKomponenta = { 0.1f, 0.1f, 0.1f, 1.0f }; float[] spekularnaKomponenta = { 0.3f, 0.3f, 0.3f, 1 }; float[] smer = { 0.0f, 0.0f, -1.0f }; // Pridruži komponente svetlosnom izvoru 0 gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_AMBIENT, ambijentalnaKomponenta); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_DIFFUSE, difuznaKomponenta); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPECULAR, spekularnaKomponenta); // Podesi parametre izvora gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPOT_DIRECTION, smer); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_SPOT_CUTOFF, 180.0f); //tackasti je refl sa cutoff 180 gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_LINEAR_ATTENUATION, 0.5f); //Sa ADD stapanjem s materijalom svetlost je bila prejaka. Ovako sam oslabila svetlo // Ukljuci svetlosni izvor gl.Enable(OpenGL.GL_LIGHT0); float[] pozicija = { 200.0f, 550.0f, 0, 1.0f }; //x,y,z,w gde je 1 poziciono svetlo. Visok izvor za vise slabljenja i manje jako svetlo gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, pozicija); float[] ambijentalnaKomponenta2 = { Rvalue, Gvalue, Bvalue, 1.0f }; float[] difuznaKomponenta2 = { 0.1f, 0.1f, 0.1f, 1.0f }; // float[] spekularnaKomponenta2 = { 0.1f, 0.1f, 0.1f, 1 }; float[] smer2 = { 0f, -1f, 0f }; gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, ambijentalnaKomponenta2); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_DIFFUSE, difuznaKomponenta2); //gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPECULAR, //spekularnaKomponenta); // Podesi parametre izvora gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_DIRECTION, smer2); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_CUTOFF, 30.0f); //tackasti je refl sa cutoff 180 // Ukljuci svetlosni izvor gl.Enable(OpenGL.GL_LIGHT1); float[] pozicija2 = { polozajX, 150.0f, -m_sceneDistance + 25, 1.0f }; //x,y,z,w gde je 1 gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, pozicija2); // Uikljuci color tracking mehanizam gl.Enable(OpenGL.GL_COLOR_MATERIAL); // Podesi na koje parametre materijala se odnose pozivi glColor funkcije gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); // Ukljuci automatsku normalizaciju nad normalama gl.Enable(OpenGL.GL_NORMALIZE); #endregion osvetljenje #region teksture gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); m_textures = new uint[m_textureCount]; // Ucitaj slike i kreiraj teksture gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Linear Filtering image.UnlockBits(imageData); image.Dispose(); } #endregion teksture // Model sencenja na flat (konstantno) gl.ShadeModel(OpenGL.GL_SMOOTH); m_scene.LoadScene(); m_scene.Initialize(); }
public void Initialize(OpenGL gl) { gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_CULL_FACE); gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); // podesi boju za brisanje ekrana na crnu gl.FrontFace(OpenGL.GL_CCW); // Osvetljenje SetupLighting(gl); gl.Enable(OpenGL.GL_NORMALIZE); // Model sencenja na flat (konstantno) gl.ShadeModel(OpenGL.GL_SMOOTH); // Ukljucivanje ColorTracking mehanizma gl.Enable(OpenGL.GL_COLOR_MATERIAL); // Pozivom glColor se definise ambijenta i difuzijalna komponenta gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); //float[] whiteLight = { 1.0f, 1.0f, 1.0f, 1.0f }; //gl.LightModel(LightModelParameter.Ambient, whiteLight); // Ukljuci automatsku normalizaciju nad normalama gl.Enable(OpenGL.GL_NORMALIZE); formula1.LoadScene(); formula1.Initialize(); formula2.LoadScene(); formula2.Initialize(); timer1 = new DispatcherTimer(); timer1.Interval = TimeSpan.FromMilliseconds(1); timer1.Tick += new EventHandler(UpdateAnimation1); // Teksture se primenjuju sa parametrom decal gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_DECAL); // GL_DECAL // Ucitaj slike i kreiraj teksture gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); // wrapping gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); // wrapping image.UnlockBits(imageData); image.Dispose(); } }
public void Initialize(OpenGL gl) { gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); //pozadina gl.ShadeModel(OpenGL.GL_FLAT); // Model sencenja na flat (konstantno) gl.Enable(OpenGL.GL_DEPTH_TEST); //ukljucivanje testiranja dubine gl.Enable(OpenGL.GL_CULL_FACE); //skrivanje nevidjivih povrsina //teksture za cube disk i quad, način stapanja teksture sa materijalom postaviti da bude GL_ADD. gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); //tackastiIzvor(gl); //reflektorskiIzvor(gl); //TODO 1 Uključiti color tracking mehanizam i podesiti da se pozivom metode glColor definiše ambijentalna i difuzna komponenta materijala. gl.Enable(OpenGL.GL_COLOR_MATERIAL); gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); //TODO 3 Ucitavanje textura // Ucitaj slike i kreiraj teksture gl.GenTextures(m_textureCount, m_textures); for (int i = 0; i < m_textureCount; ++i) { // Pridruzi teksturu odgovarajucem identifikatoru gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[i]); // Ucitaj sliku i podesi parametre teksture Bitmap image = new Bitmap(m_textureFiles[i]); // rotiramo sliku zbog koordinantog sistema opengl-a image.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); // RGBA format (dozvoljena providnost slike tj. alfa kanal) BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); gl.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, (int)OpenGL.GL_RGBA8, image.Width, image.Height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, imageData.Scan0); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR); // Linear Filtering gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_REPEAT); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_REPEAT); image.UnlockBits(imageData); image.Dispose(); } //TODO 6 Kamera lookAtCam = new LookAtCamera(); lookAtCam.Position = new Vertex(0, 180, 2000); lookAtCam.Target = new Vertex(0f, 150f, 0); lookAtCam.UpVector = new Vertex(0f, 1f, 0f); lookAtCam.AspectRatio = width / height; lookAtCam.Near = 1.0f; lookAtCam.Far = 20000f; gl.LookAt(0.0f, 180.0f, 2000, 0.0f, 150.0f, 0, 0.0f, 1.0f, 0.0f); ////gl.Perspective(60f, (double)width / height, 1.0f, 20000f); scene.LoadScene(); scene.Initialize(); }