View Full Version : سوال: چرا وقتی texture می کنم در اجرا ، صفحه تاریک هست؟
asefy2008
جمعه 08 آبان 1388, 18:19 عصر
با سلام خدمت دوستان
من دارم با استفاده از سی شارپ و opengl یک اتاق ساده طراحی می کنم زمانی که از کدهای زیر برای texture کردن (برای انداختن یک عکس روی دیوار) استفاده می کنم صفحه تاریک میشه (مثل این که شب شده)
textureImage = new Bitmap(@"Crate.bmp");
glEnable(SharpGL.OpenGL.TEXTURE_2D);
// Get one texture id, and stick it into the textures array.
glGenTextures(1, textures);
// Bind the texture.
glBindTexture(SharpGL.OpenGL.TEXTURE_2D, textures[0]);
// Tell OpenGL where the texture data is.
glTexImage2D(SharpGL.OpenGL.TEXTURE_2D, 0, 3, textureImage.Width, textureImage.Height, 0, SharpGL.OpenGL.RGB, SharpGL.OpenGL.UNSIGNED_BYTE,
textureImage.LockBits(new Rectangle(0, 0, textureImage.Width, textureImage.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb).Scan0);
glTexParameterf(SharpGL.OpenGL.TEXTURE_2D, SharpGL.OpenGL.TEXTURE_MIN_FILTER, SharpGL.OpenGL.LINEAR); // Linear Filtering
glTexParameterf(SharpGL.OpenGL.TEXTURE_2D, SharpGL.OpenGL.TEXTURE_MAG_FILTER, SharpGL.OpenGL.LINEAR); // Linear Filtering
کسی می دونه چرا ؟
در ضمن اگر کسی یک عکس با پسوند bmp برای انداختن رو دیوار داره لطفا بزاره؟
pswin.pooya
جمعه 08 آبان 1388, 19:25 عصر
1. دستور glTexImage2D رو بعد از صدا مقدار دهی پارامترها تکسچر فراخوانی کن. فراخوانی این دستور قبل از اونها باعث میشه که تکسچر ساخته نیشه.
2. قبل از رسم شکل مقدار سفید رو به عنوان رنگ انتخاب کن :
glColor3f(1.0f,1.0f,1.0f);
asefy2008
جمعه 08 آبان 1388, 23:46 عصر
ممنون از توجهتون
منظورتون به این شکل هست:
textureImage = new Bitmap(@"Crate.bmp");
glEnable(SharpGL.OpenGL.TEXTURE_2D);
// Get one texture id, and stick it into the textures array.
glGenTextures(1, textures);
// Bind the texture.
glBindTexture(SharpGL.OpenGL.TEXTURE_2D, textures[0]);
glTexParameterf(SharpGL.OpenGL.TEXTURE_2D, SharpGL.OpenGL.TEXTURE_MIN_FILTER, SharpGL.OpenGL.LINEAR); // Linear Filtering
glTexParameterf(SharpGL.OpenGL.TEXTURE_2D, SharpGL.OpenGL.TEXTURE_MAG_FILTER, SharpGL.OpenGL.LINEAR); // Linear Filtering
//Tell OpenGL where the texture data is.
glTexImage2D(SharpGL.OpenGL.TEXTURE_2D, 0, 3, textureImage.Width, textureImage.Height, 0, SharpGL.OpenGL.RGB, SharpGL.OpenGL.UNSIGNED_BYTE,
textureImage.LockBits(new Rectangle(0, 0, textureImage.Width, textureImage.Height),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb).Scan0);
اما تغییری صورت نگرفت باز هم در حالت اجرا تاریک میشه(من در مورد انداختن عکس رو صفحه مشکلی ندارم ،مشکل من تو تاریک شدن)
اینم کدی که باهاش،عکس ر. میزارم رو صفحه.
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad
glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); ;
glEnd();
pswin.pooya
شنبه 09 آبان 1388, 00:17 صبح
نمی دونم چرا پارامتر سوم دستور glTexImage2D رو 3 گذاشتین. داخل این پارامتر باید نوع داده دیتای عسکتون رو بذارید مثلا GL_RGBA:
http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml
قبل دستور glBegin هم دستور glColor3f(1.0f,1.0f,1.0f) رو قرار بدین.
اگر به جای تکسچر یه مورد سیاه نمایش داده میشه این به این معنی هستش که تکسچر ساخته نشده و یا اینکه رنگ سیاه به ورتکسهای داده شده.
asefy2008
شنبه 09 آبان 1388, 02:37 صبح
نمی دونم چرا پارامتر سوم دستور glTexImage2D رو 3 گذاشتین.
من هم نمی دونم، opengl بلد نیستم، این کد رو هم از یه مثال گرفتم تو اون این طوری بود.
داخل این پارامتر باید نوع داده دیتای عسکتون رو بذارید مثلا GL_RGBA:
به نظر شما چی باید بزارم؟
قبل دستور glBegin هم دستور glColor3f(1.0f,1.0f,1.0f) رو قرار بدین.
گذاشتم ولی بازهم درست نشد.
اگر به جای تکسچر یه مورد سیاه نمایش داده میشه این به این معنی هستش که تکسچر ساخته نشده و یا اینکه رنگ سیاه به ورتکسهای داده شده.
تکسچر نمایش داده میشه ولی تاریک هست و در اون تاریکی تکسچر و سایر موارد دیده میشه.(منظورم این هست که نسبت به قبل از استفاده از تکسچر ، فضا تاریک نشون داده میشه.)
نمی دونم تونستم منظورم رو برسونم یا نه ؟
pswin.pooya
شنبه 09 آبان 1388, 08:37 صبح
از نور پردازی استفاده می کنی؟؟
برای غیر فعال کردنش از دستور زیر استفاده کن:
glDisable(GL_LIGHTING);
asefy2008
شنبه 09 آبان 1388, 14:29 عصر
نه،می تونی یه مثال از نورپردازی، لینک بدی ؟
pswin.pooya
شنبه 09 آبان 1388, 20:57 عصر
مثالهای OpenGL اکثرا بر پایه C++ هستن ولی تبدیل کردن اونها به مثالهای C# کاری نداره. سایتهای زیر میتونن کمک زیادی بهت بکنن:
http://www.codesampler.com/oglsrc.htm
http://nehe.gamedev.net/
syntiberium
سه شنبه 19 آبان 1388, 13:35 عصر
با سلام . مي شه لطف كنيد فايل هاي مورد نياز براي opengl در c++ را در اينجا لينك بدين . خيلي ممنون مي شم . با تشكر .
pswin.pooya
سه شنبه 19 آبان 1388, 14:02 عصر
با سلام . مي شه لطف كنيد فايل هاي مورد نياز براي opengl در C++ را در اينجا لينك بدين . خيلي ممنون مي شم . با تشكر .
برای کار با OpenGL داخل ویژوال استادیو و یا محیطهای دیگه شما نیازی به فایل ندارید تنها کافیه که هدر hl.h رو تعریف کنید و فایل کتابخونه opengl32.lib رو به لینکر معرفی کنید. برای ویژوال استادیو داریم :
#include <GL/gl.h>
#pragma comment(lib,"opengl32.lib")
برای اینکه از ویرایشهای بالاتر از OpenGL 1.2 استفاده کنید باید درایورهای مربوطه رو نصب کنبد و همچنین یا از کتابخونهایی مثل glew و یا glee استفاده کنید و یا اینکه خوتون دستی توابع رو تعریف کنید.
http://www.opengl.org/sdk/libs/GLEW/
ممکنه برای کار به OprnGL نیاز به glut داشته باشید اون رو هم میتونید از آدرس زیر بگیرید:
http://www.opengl.org/resources/libraries/
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.