Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С чего начать - C# + OpenGL 
:(
    Опции темы
bc0der
Дата 15.4.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 9.5.2006

Репутация: нет
Всего: нет



Подскажите пожалуйста как написать хоть самую простую OpenGL программу на C# ? Скачал библиотеку Tao . Дайте пожалуйста примеры , кто писал проги ( самые простые ) .
PM MAIL ICQ   Вверх
WERITAS
Дата 16.4.2007, 22:54 (ссылка)   | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: 2
Всего: 5



ИМХО неудачный выбор языка для работы с графикой. C# - скриптовый язык, и на нем одном хорошее графическое приложение не построишь


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
$tatic
Дата 16.4.2007, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



На сайте библиотеки SDL.NET есть порты примеров NeHe для связки SDL.NET + Tao.GL на C#.

Цитата(WERITAS @  16.4.2007,  23:54 Найти цитируемый пост)
C# - скриптовый язык

C# - не скриптовый язык.

Цитата(WERITAS @  16.4.2007,  23:54 Найти цитируемый пост)
на нем одном хорошее графическое приложение не построишь

Ни на чем не основанное заключение. C# свободно справляется и не с такими задачами.
PM MAIL   Вверх
arilou
Дата 17.4.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



WERITAS
$tatic


M
arilou
Главное, во флейм не сорвитесь



--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
nerezus
Дата 18.4.2007, 16:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата
C# - скриптовый язык, и на нем одном хорошее графическое приложение не построишь
 Прежде, чем что-то ляпнуть, надо думать, головой.


arilou$tatic, И вообще мне кажется, что это тролль, см. причины изменения его репутации.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
RWander
Дата 12.9.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: нет
Всего: 6



Цитата(nerezus @  18.4.2007,  18:17 Найти цитируемый пост)
И вообще мне кажется, что это тролль

 smile

Добавлено через 8 минут и 39 секунд
Цитата(bc0der @  15.4.2007,  19:40 Найти цитируемый пост)
Подскажите пожалуйста как написать хоть самую простую OpenGL программу на C# ?


подключи opengl32.dll и glu32.dll к своему проекту и импортируй те функции, которые тебе необходимы

например:
Код

        [DllImport("opengl32.dll")]   public static extern void glBegin(uint mode);
        [DllImport("opengl32.dll")]   public static extern void gEnd();
        ....


ЗЫ: в списке юсингов необходимо прописать:
Код

using System.Runtime.InteropServices;


хотя, по-моему, tao framework использовать лучше - геморою меньше будет.

Добавлено через 10 минут и 6 секунд
или сразу переходи на XNA framework


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
NightmareZ
Дата 21.9.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Цитата(bc0der @  15.4.2007,  17:40 Найти цитируемый пост)
Дайте пожалуйста примеры , кто писал проги ( самые простые ) .


Код

using System;
using Tao.Platform.Windows;
using Tao.OpenGl;
using System.Runtime.InteropServices;

namespace MyFramework
{
    public class RenderException : ApplicationException 
    {
        public RenderException(string s) : base(s) { }
    }

    public class Render: IDisposable
    {
        private IntPtr Handle = IntPtr.Zero;
        private IntPtr dc = IntPtr.Zero;
        private IntPtr hrc = IntPtr.Zero;

        public Render(IntPtr Handle)
        {
            this.Handle = Handle;
            if (Handle == IntPtr.Zero)
            {
                throw new RenderException("Invalid window handle!");
            }

            dc = User.GetDC(Handle);
            if (dc == IntPtr.Zero)
            {
                throw new RenderException("Can't get device context!");
            }

            var pfd = new Gdi.PIXELFORMATDESCRIPTOR();
            pfd.dwFlags = Gdi.PFD_SUPPORT_OPENGL |
                Gdi.PFD_DRAW_TO_WINDOW |
                Gdi.PFD_DOUBLEBUFFER;
            pfd.nVersion = 1;
            pfd.nSize = (short)Marshal.SizeOf(pfd);

            var PixelFormat = Gdi.ChoosePixelFormat(dc, ref pfd);
            if (PixelFormat == 0)
            {
                throw new RenderException("Can't choose pixel format!");
            }

            if (!Gdi.SetPixelFormat(dc, PixelFormat, ref pfd))
            {
                throw new RenderException("Can't set pixel format!");
            }

            hrc = Wgl.wglCreateContext(dc);
            if (hrc == IntPtr.Zero)
            {
                throw new RenderException("Can't create rendering context!");
            }

            if (!Wgl.wglMakeCurrent(dc, hrc))
            {
                throw new RenderException("Can't set current rendering context!");
            }
        }

        ~Render()
        {
            Destructor();
        }

        private void Destructor()
        {
            if (hrc != IntPtr.Zero)
            {
                Wgl.wglMakeCurrent(IntPtr.Zero, IntPtr.Zero);
                Wgl.wglDeleteContext(hrc);
            }

            if (dc != IntPtr.Zero)
            {
                User.ReleaseDC(Handle, dc);
            }

            Handle = IntPtr.Zero;
        }

        public void Dispose()
        {
            GC.SuppressFinalize(this);
            Destructor();
        }

        public void Resize(int Width, int Height)
        {
            Width = Math.Abs(Width);
            Height = Math.Abs(Height);

            if (Width == 0)
            {
                Width = 1;
            }

            if (Height == 0)
            {
                Height = 1;
            }

            Gl.glViewport(0, 0, Width, Height);
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            Glu.gluPerspective(45, (double)Width / (double)Height, 1, 1000);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
        }

        public void BeginScene()
        {
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
        }

        public void EndScene()
        {
            Gdi.SwapBuffers(dc);
        }
    }
}


Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MakarovFramework;

namespace MyProject
{
    public partial class Form1 : Form
    {
        private Render render = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            render = new Render(Handle);
            render.Resize(Width, Height);
            
        }

        private void Form1_Click(object sender, EventArgs e)
        {
            if (render != null)
            {
                render.BeginScene();

                render.EndScene();
            }
        }

        private void Form1_ResizeEnd(object sender, EventArgs e)
        {
            if (render != null)
            {
                render.Resize(Width, Height);
            }
        }
    }
}



--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
RWander
Дата 22.9.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: нет
Всего: 6



NightmareZ, хороший пример +1
есть еще одна очень хорошая статья по использованию OpenGL в .NET



--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
arilou
Дата 22.9.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



NightmareZ, тока вместо финалайзера надо использовать реализацию IDisposable


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
NightmareZ
Дата 24.9.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Цитата(arilou @  22.9.2007,  19:32 Найти цитируемый пост)
NightmareZ, тока вместо финалайзера надо использовать реализацию IDisposable

Дык, как бы, оно и используется.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
RWander
Дата 24.9.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: нет
Всего: 6



Цитата(NightmareZ @  21.9.2007,  20:55 Найти цитируемый пост)
 var pfd = new Gdi.PIXELFORMATDESCRIPTOR();

а что за "var"? у меня выдает ошибку, говорит пространство имен или тип не найден.



--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
RWander
Дата 24.9.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: нет
Всего: 6



а и еще, как с помощью Tao Framework работать с текстурами? есть ли какой-нибудь аналог функции auxDIBImageLoad(char* file) для загрузки текстуры из файла?


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
NightmareZ
Дата 24.9.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Цитата(RWander @ 24.9.2007,  20:57)
Цитата(NightmareZ @  21.9.2007,  20:55 Найти цитируемый пост)
 var pfd = new Gdi.PIXELFORMATDESCRIPTOR();

а что за "var"? у меня выдает ошибку, говорит пространство имен или тип не найден.

Юз да Visual Studio 2008. Это C#3.

Просто чтоб не писать
Код

Gdi.PIXELFORMATDESCRIPTOR pfd = new Gdi.PIXELFORMATDESCRIPTOR();

пишем
Код

var pfd = new Gdi.PIXELFORMATDESCRIPTOR();

и тип переменной pfd определяется сам.

Цитата(RWander @ 24.9.2007,  21:25)
а и еще, как с помощью Tao Framework работать с текстурами? есть ли какой-нибудь аналог функции auxDIBImageLoad(char* file) для загрузки текстуры из файла?

Определена ли данная функция в Tao Framework - не знаю. Даже если нет - никто не мешает самому её описать и использовать.

Это сообщение отредактировал(а) NightmareZ - 24.9.2007, 22:48


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
RWander
Дата 25.9.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: нет
Всего: 6



 может хотя бы есть какой-нибуь пример по работе с текстурами в tao?


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
RWander
Дата 25.9.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: нет
Всего: 6



Попытался написать загрузку текстуры, вроде правильно, но не работает. Может кто подскажет, в чем проблема?
Код

            int[] texture = new int[1];  // Место для одной текстуры

           //получение массива байтов
            System.IO.Stream str = 
                new System.IO.FileStream(@"img.bmp", System.IO.FileMode.Open); 
            System.IO.BinaryReader br = 
                new System.IO.BinaryReader(str);
            byte[] img_bytes = br.ReadBytes((int)br.BaseStream.Length);
            str.Close();

            // Создание текстуры
            Gl.glGenTextures(1, texture);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[0]);

            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);


            Gl.glPixelStorei(Gl.GL_UNPACK_ALIGNMENT, 1);
            Glu.gluBuild2DMipmaps(Gl.GL_TEXTURE_2D, Gl.GL_RGB, 57, 64, Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, img_bytes);

            //должен рисоваться текстурированный треугольник,
            //но вместо это рисуется белый треугольник.
            Gl.glBegin(Gl.GL_TRIANGLES);
            Gl.glTexCoord2f(1, 1); Gl.glVertex2f(1, 1);
            Gl.glTexCoord2f(0, 0); Gl.glVertex2f(0, 0);
            Gl.glTexCoord2f(0, 1); Gl.glVertex2f(0, 1);
            Gl.glEnd();




--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0891 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.