PDA

View Full Version : سوال: راهنــــــــمایی در مـــــــــورد استــــــــــــــــــــفا ده از opengl در QT ؟؟؟ :( ؟؟؟؟



turn-off
دوشنبه 12 خرداد 1393, 14:51 عصر
سلام
من میخواستم از opengl توی qt استفاده کنم
تونستم بیارمش توی فرمم
حالا هر چیزی میخوام داخلش رسم کنم نمیشه
این کد رو نوشتم:
glbegin(GL_POINTS)
{
glcolor3f(1,0,0,);
glvertex2i(10,10);
beep(400,300);
glend();
}
حالا وقتی اجرا میشه صدای بوق رو پخش میکنه
ولی چیزی توی opengl نشون نمیده.

کامبیز اسدزاده
چهارشنبه 14 خرداد 1393, 10:31 صبح
سلام
من میخواستم از opengl توی qt استفاده کنم
تونستم بیارمش توی فرمم
حالا هر چیزی میخوام داخلش رسم کنم نمیشه
این کد رو نوشتم:
glbegin(GL_POINTS)
{
glcolor3f(1,0,0,);
glvertex2i(10,10);
beep(400,300);
glend();
}
حالا وقتی اجرا میشه صدای بوق رو پخش میکنه
ولی چیزی توی opengl نشون نمیده.

قبل از هر چیزی باید بررسی کنید که سیستم عامل و کارت گرافیکی شما نسخه OpenGL ای که Qt داره رو پشتیبانه بکنه !
خطا و یا هر LOG ای که براتون میده رو بزارید تا بیشتر بررسی شود.

turn-off
چهارشنبه 14 خرداد 1393, 10:37 صبح
ممنون
حل شد
حالا میخوام فارسی بنویسم توی opengl
قبلا برای فارسی نویسی توی سی++ تونستم از ftgl & freetype استفاده کنم
حالا بخوام بیارمش توی کیوت باید چکار کنم؟

کامبیز اسدزاده
چهارشنبه 14 خرداد 1393, 10:42 صبح
ممنون
حل شد
حالا میخوام فارسی بنویسم توی opengl
قبلا برای فارسی نویسی توی سی++ تونستم از ftgl & freetype استفاده کنم
حالا بخوام بیارمش توی کیوت باید چکار کنم؟

توی Qt مشکلی با فارسی نداریم‌! حتی میتونید Unicode مشخصی رو براش تعیین کنید در خود C++ این کارها امکانپذیره.
در Qt شما باید کتاب خانه OpenGl رو فراخوانی و بعد کد هارو هماهنگ و در صورت نیاز بازنویسی کنید.


QT += opengl


این کد باید در فایل .pro پروژه شما وجود داشته باشد.

turn-off
چهارشنبه 14 خرداد 1393, 11:04 صبح
توی Qt مشکلی با فارسی نداریم‌! حتی میتونید Unicode مشخصی رو براش تعیین کنید در خود C++‎‎ این کارها امکانپذیره.
در Qt شما باید کتاب خانه OpenGl رو فراخوانی و بعد کد هارو هماهنگ و در صورت نیاز بازنویسی کنید.


QT += opengl


این کد باید در فایل .pro پروژه شما وجود داشته باشد.



#include "stdafx.h"
#include <string>
#include <Windows.h>
#include <GL/glut.h>


#include <FTGL/ftgl.h>
using namespace std;
static FTFont *font[3];
static int fontindex = 0;


static int frames = 0;


# define FONT_FILE "data\\trado.ttf"




wchar_t CalcChar(int id, bool prev, bool next)


{


if (prev && next)


return id;


else if (next)


return id - 1;


else if (prev)


return id - 2;


else


return id - 3;






} // CalcChar






wstring Convertp(wstring m_pText){


int pch = 0, nch = 0, tLen = m_pText.length();


bool bp, bn;


wstring wtch = m_pText;






for (int i = 0; i < tLen; i++)


{


bp = bn = true;


if (i - 1 >= 0)


pch = wtch[i - 1];


else


pch = 32;


if (i + 1 < tLen)


nch = wtch[i + 1];
else
nch = 32;


if (pch == 32 || pch == 1575 || pch == 1608 || pch == 1688)


bp = false;


else if (pch > 1582 && pch < 1587)


bp = false;


if (nch == 32)


bn = false;






// start farsi script


switch (m_pText[i])


{


// Hamze


case 1574:


m_pText[i] = CalcChar(65164, bp, bn);


break;


// Alef


case 1575:


if (bp)


m_pText[i] = 65166;


else


m_pText[i] = 65165;


break;


// Be


case 1576:


m_pText[i] = CalcChar(65170, bp, bn);


break;


// Te


case 1578:


m_pText[i] = CalcChar(65176, bp, bn);


break;


// Se


case 1579:


m_pText[i] = CalcChar(65180, bp, bn);


break;


// Jim


case 1580:


m_pText[i] = CalcChar(65184, bp, bn);


break;


// He jimi


case 1581:


m_pText[i] = CalcChar(65188, bp, bn);


break;


// Khe


case 1582:


m_pText[i] = CalcChar(65192, bp, bn);


break;


// Dal


case 1583:


if (bp)


m_pText[i] = 65194;


else


m_pText[i] = 65193;


break;






// Zal


case 1584:


if (bp)


m_pText[i] = 65196;


else


m_pText[i] = 65195;


break;






// Re


case 1585:


if (bp)


m_pText[i] = 65198;


else


m_pText[i] = 65197;


break;






// Ze


case 1586:


if (bp)


m_pText[i] = 65200;


else


m_pText[i] = 65199;


break;






// Sin


case 1587:


m_pText[i] = CalcChar(65204, bp, bn);


break;






// Shin


case 1588:


m_pText[i] = CalcChar(65208, bp, bn);


break;






// Sad


case 1589:


m_pText[i] = CalcChar(65212, bp, bn);


break;






// Zad


case 1590:


m_pText[i] = CalcChar(65216, bp, bn);


break;


// Ta daste dar


case 1591:


if (bp)


m_pText[i] = 65220;


else


m_pText[i] = 65219;


break;






// Za daste dar


case 1592:


if (bp)


m_pText[i] = 65224;


else


m_pText[i] = 65223;


break;






// Eyn


case 1593:


m_pText[i] = CalcChar(65228, bp, bn);


break;






// Gheyn


case 1594:


m_pText[i] = CalcChar(65232, bp, bn);


break;






// Fe


case 1601:


m_pText[i] = CalcChar(65236, bp, bn);


break;






// Ghaf


case 1602:


m_pText[i] = CalcChar(65240, bp, bn);


break;






// Lam


case 1604:


m_pText[i] = CalcChar(65248, bp, bn);


break;






// Mim


case 1605:


m_pText[i] = CalcChar(65252, bp, bn);


break;






// Noon


case 1606:


m_pText[i] = CalcChar(65256, bp, bn);


break;






// He


case 1607:


m_pText[i] = CalcChar(65260, bp, bn);


break;






// Vav


case 1608:


if (bp)


m_pText[i] = 65262;


else


m_pText[i] = 65261;


break;






// Pe


case 1662:


m_pText[i] = CalcChar(64345, bp, bn);


break;






// Che


case 1670:


m_pText[i] = CalcChar(64381, bp, bn);


break;






// Zhe


case 1688:


if (bp)


m_pText[i] = 64395;


else


m_pText[i] = 64394;


break;






// Ke


case 1705:


m_pText[i] = CalcChar(64401, bp, bn);


break;






// Gaf


case 1711:


m_pText[i] = CalcChar(64405, bp, bn);


break;






// Ye


case 1740:


case 1610:


if (bp && bn)


m_pText[i] = 65268;


else if (bp)


m_pText[i] = 65264;


else if (bn)


m_pText[i] = 65267;


else


m_pText[i] = 65263;


break;
}
}


for (int i = 0; i < tLen; i++)


wtch[i] = m_pText[tLen - i - 1];


for (int i = 0; i < tLen; i++)


m_pText[i] = wtch[i];


return m_pText;


wtch.clear();
}


static void RenderScene(void)
{
int now = glutGet(GLUT_ELAPSED_TIME);

char outstr[256];
glPushMatrix();

font[fontindex]->Render(Convertp(L" ???? ????? ").c_str());
glPopMatrix();
glutSwapBuffers();
frames++;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("simple FTGL C++ demo");
glutDisplayFunc(RenderScene);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90, 640.0f / 480.0f, 1, 1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 640.0f / 2.0f, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
font[0] = new FTExtrudeFont( FONT_FILE);
font[0]->FaceSize(80);
glutMainLoop();
return EXIT_SUCCESS;
}


این کدیه که توی سی++ نوشتم
حروف رو تک تک تعریف کردم
بخوام بیارمش توی کیوت باید قسمت های مختلفو به کجای کیوت اضافه کنم؟

کامبیز اسدزاده
چهارشنبه 14 خرداد 1393, 11:33 صبح
خب مشخصه شما اصلا توی Qt پروژه تا حالا ایجاد نکردین !!! چون همین main و بندو بساط دیگه همشون وجود دارند فقط کافیه پروژه رو ایجاد و کدهاتون رو جایگزین کنید...شما ۳ تا روش دارین برای این کار...


همه این کد هارو با کتابخانه Qt بازنویسی کنید...یک پروژه جدید در کیوت باز کنید و از کتابخانه های خود Qt استفاده کنید (در حالت بازنویسی دقت کنید که مثلا به جای String باید بنویسید QString منظور از بازنویسی این موارد هستش در غیر اینصورت Qt خطا خواهد داد مگر تینکه عمل Type Convert انجام دهید.)
همین کد هارو میتونید در Qt وارد کنید ولی با این تفاوت که باید پروژه رو از نوع Empty ایجاد و از نوع Standard C++‎‎‎ Mode ایجاد کنید.
این کد هاتون رو که نوشتین به صورت یک DLL در بیارید و در Qt واردش کنید.


هزارو یکجور راه حل وجود داره ولی ساده ترینش همیناست که گفتم.

و اینم یک نکته که اگه پیغام خطا برای عدم پشتیبانی از C++‎‎‎11 داد در این صورت کد زیر رو در فایل .pro قرار دهید.


CONFIG += C++‎‎‎11


برای موارد خاص اینکه در Qt به جای std::string باید چی بنویسیم... باید مستندات رو مطالعه کنید و یا اینکه گفتم عملیات تبدیل و جایگزین رو استفاده کنید.

موفق باشید.

turn-off
چهارشنبه 14 خرداد 1393, 11:40 صبح
ممنونم
من چون تو این محیط تازه دارم کار میکنم زیاد آشنا نیستم
یکی از همین راه ها رو میشه قدم به قدم برام توضیح بدین تا انجام بدم؟

کامبیز اسدزاده
چهارشنبه 14 خرداد 1393, 11:43 صبح
ممنونم
من چون تو این محیط تازه دارم کار میکنم زیاد آشنا نیستم
یکی از همین راه ها رو میشه قدم به قدم برام توضیح بدین تا انجام بدم؟

اینم آموزش قدم به قدم کار با Qt : http://barnamenevis.org/showthread.php?436304-%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%88-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-C-%E2%80%8E%E2%80%8E-Qt-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%DA%AF%D8%A7%D9%85-%D8%A8%D9%87-%DA%AF%D8%A7%D9%85

این مباحث رو بررسی کنید متوجه خواهید شد.

turn-off
چهارشنبه 14 خرداد 1393, 11:54 صبح
خیلی ممنونم
این ارور رو بهم میده:
ftfont does not typename

کامبیز اسدزاده
چهارشنبه 14 خرداد 1393, 13:10 عصر
خیلی ممنونم
این ارور رو بهم میده:
ftfont does not typename

یعنی با این سرعت در عرض 11 دقیقه بعد از پست من شما Qt رو یاد گرفتین ؟‌:لبخندساده:

turn-off
چهارشنبه 14 خرداد 1393, 13:46 عصر
نه:گیج:
همون کاری که خودم کردم گفتم این ارور رو داره
مطالب شما رو هم دارم میخونم
ولی توی opengl که نیست!!!!!!!!!!!:افسرده::افسرده:

کامبیز اسدزاده
چهارشنبه 14 خرداد 1393, 14:05 عصر
نه:گیج:
همون کاری که خودم کردم گفتم این ارور رو داره
مطالب شما رو هم دارم میخونم
ولی توی opengl که نیست!!!!!!!!!!!:افسرده::افسرده:

فعلا به مبحث OpenGL اشاره ای نکردم همینکه چطور باید توی محیط Qt کد بزنید رو آشنا بشید خودتون متوجه بقیه موارد خواهید شد.

turn-off
چهارشنبه 14 خرداد 1393, 14:08 عصر
باشه میخونم حتماممنونفقط شما میشه بگید اون اروره واسه چیه؟

turn-off
چهارشنبه 14 خرداد 1393, 14:56 عصر
فعلا به مبحث OpenGL اشاره ای نکردم همینکه چطور باید توی محیط Qt کد بزنید رو آشنا بشید خودتون متوجه بقیه موارد خواهید شد.

اگه میشه زودتر آموزش رو در opengl هم بذارید
:ناراحت:

حمید رضا رحیمیان
سه شنبه 20 خرداد 1393, 19:45 عصر
سلام برای کار با opengl در کیوتی میتونید از QGLWidget استفاده کنید.لینک زیر قسمت protected اقلب توابعی که برای رسم و اندازه و ... باهاشون کار میکنیم را نوشته
http://qt-project.org/doc/qt-4.8/qglwidget.html
البته یکمی منم سردرگم هستم
اول داخل فایل .pro باید به قول خودمون بهش بگی میخوای کار سه بعدی انجام بدی
QT += core opengl gui widgets

بعد یک کلاس جدید اضافه کنید
base Class: QGLWidget
Type Information: QWidget

در کلاس جدید سه تابع زیر را اضافه کنید.

protected:
void initializeGL();
void paintGL();
void resizeGL(int w, int h);


حالا باید کدهای مورد نظرتون را اضافه کنید من برنامه ی شما را پیوست کردم
120062