Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему-то не отрисовывается трехугольник :(, помогите! 
V
    Опции темы
it_medved
Дата 28.6.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот код
Код

private void Form1_Paint(object sender, PaintEventArgs e)
        {
            CustomVertex.TransformedColored[] n = new CustomVertex.TransformedColored[3];

            Rectangle rc = this.ClientRectangle;

            n[0].Position = new Vector4(rc.Width/2.0F, 50.0F, 0.5F, 1.0F);
            n[0].Color = System.Drawing.Color.Green.ToArgb();

            n[1].Position = new Vector4((rc.Width - (rc.Width / 5)), (rc.Height - (rc.Height / 5)), 0.5F, 1.0F);
            n[1].Color = System.Drawing.Color.Red.ToArgb();

            n[2].Position = new Vector4(rc.Width / 5, (rc.Height - (rc.Height / 5)), 0.5F, 1.0F);
            n[2].Color = System.Drawing.Color.Blue.ToArgb();

            dev.BeginScene();

            dev.VertexFormat = CustomVertex.TransformedColored.Format;
            dev.DrawUserPrimitives(PrimitiveType.TriangleList, 3, n);
            dev.EndScene();
        }


И ничего не происходит :(



Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Application3.rar 38,41 Kb
PM MAIL WWW   Вверх
kuller
Дата 28.6.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



it_medved, тебе просто ТРЕУГОЛЬНИК надо нарисовать??? 
PM MAIL   Вверх
DimonSE
Дата 29.6.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пример случайно не с книги "Миллер Т. - DirectX 9 с управляемым кодом. Программирование игр и графика"?  smile 

Я такой точно пример видел в отсканированной халявной версии книжки. Пока понял что там скорее всего ошибка(или просто неудачно отсканированное)

dev.DrawUserPrimitives(PrimitiveType.TriangleList, 3, n); второй параметр (цифра 3) означает что у тебя три треугольника, а ведь у тебя только один правда?

кроме того перед dev.BeginScene(); желательно вызвать dev.Clear(ClearFlags.Target, System.Drawing.Color.<твой цвет фона>, 1.0f, 0);

а после dev.EndScene(); нужно dev.Present() для того чтоб твое творение появилось))))
ну и при изменении размеров окна будут у тебя глюки, устраняется так:
после dev.Present() нужно еще dev.Invalidate();а чтоб не мерцало то в конструкторе вписать строку this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
Да ты только метод Paint нам показал а инициализацию dev почему нет в примере, может и там замутил чтото?

Ой чтото много переделать нада)) пожалуй я выложу твой код в рабочем состоянии

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace TestVertex
{
    public partial class Form1 : Form
    {
        Device dev = null;
        public Form1()
        {
            InitializeComponent();
            PresentParameters pr = new PresentParameters();
            pr.Windowed = true;
            pr.SwapEffect = SwapEffect.Discard;
            //создаем устройство через которое работаем с 3D
            dev = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, pr);
            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); //чтоб форма не мерцала
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            dev.Clear(ClearFlags.Target, Color.LightGreen, 1.0f, 0);
            //твой кусок кода :)
            CustomVertex.TransformedColored[] n = new CustomVertex.TransformedColored[3];
            Rectangle rc = this.ClientRectangle;
            n[0].SetPosition(new Vector4(rc.Width / 2.0F, 50.0F, 0.5F, 1.0F));
            n[0].Color = System.Drawing.Color.Green.ToArgb();
            n[1].SetPosition(new Vector4((rc.Width - (rc.Width / 5)), (rc.Height - (rc.Height / 5)), 0.5F, 1.0F));
            n[1].Color = System.Drawing.Color.Red.ToArgb();
            n[2].SetPosition(new Vector4(rc.Width / 5, (rc.Height - (rc.Height / 5)), 0.5F, 1.0F));
            n[2].Color = System.Drawing.Color.Blue.ToArgb();
            dev.BeginScene();
            dev.VertexFormat = CustomVertex.TransformedColored.Format;
            dev.DrawUserPrimitives(PrimitiveType.TriangleList, 1, n); // здесь второй параметр 1 а не 3!
            dev.EndScene();

            dev.Present(); //покажись великий треугольник)))

            Invalidate(); //не забываем!
        }
    }
}


Добавлено через 8 минут и 8 секунд
Кстати книга "Миллер Т. - DirectX 9 с управляемым кодом. Программирование игр и графика" классная!

А то что в отсканированной версии ошибок много, заставляет действительно вникнуть в то что написано,а не тупо драть с примера как я иногда в силу природной лени делаю smile

сорри за оффтоп
PM MAIL   Вверх
it_medved
Дата 29.6.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасиб, функция dev.Present(); помогла, трехугольник отрисовывается, но на фоне хрень какаето происходит :(

Вот проект там экзешник, посмотри сам

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Application3.rar 39,00 Kb
PM MAIL WWW   Вверх
DimonSE
  Дата 11.7.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Э брат ты в обработчике Paint забыл вначале сделать dev.Clear(ClearFlags.Target, Color.LightGreen, 1.0f, 0);
поэтому у тебя фон и не очищен!

А вообще твой код у меня не откомполился даже, наверно DirectX SDK у меня другой.
вместо строки n[0].Position = new Vector4(тра-ля-ля);
нужно n[0].SetPosition(new Vector4(тра-ля-ля);
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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