Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт июн 27, 2017 11:37 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 1093 сообщения ]  На страницу Пред. 169 70 71 72 73 След.
Автор Сообщение
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Сб дек 26, 2015 12:18 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1211
First, confirm the problem, I personally did not do the effort to do so ;)

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Сб дек 26, 2015 1:28 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4088
I confirm that current issue causes only in case when these two libraries are included simultaniously.
Accurate the problem and confirm it or not can only kernel-guys.

Hmm... Could anyone check in FASM does the app that uses http.obj and libini.jbj crashes?

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Сб дек 26, 2015 2:02 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1211
I suggest to read and continue the discussion in this topic then: viewtopic.php?f=24&t=2063

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Вс янв 10, 2016 7:44 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4088
Итак, мне нужен алгоритм смешивания цветов.
Тут https://toster.ru/q/19490 нашел следующий R= R1*a + R2*(1-a)

Написал прогу:
Спойлер: Показать
Код:
#define MEMSIZE 4096*4

#include "../lib/kolibri.h"

void main()
{
   loop() switch(WaitEvent())
   {
      case evButton:
      ExitProcess();
      case evReDraw:
      DrawWindow();
   }
}

void DrawWindow()
{
   int i;
   dword col;
   DefineAndDrawWindow(215,100,350,200,0x34,0xFFFFFF,"Mix colors");
   for (i=0; i<=10; i++) {
      col = DrawMixedColor(0xFFFfff, 0x000000, i);
      DrawBar(20*i+10,10,20,80,col);
   }
}

unsigned DrawMixedColor(dword _base, _overlying, _alpha)
{
   // R= R1*a + R2*(1-a)
   unsigned r1, r2;
   r1 = _base / 10 * _alpha;
   r2 = _overlying / 10;
   return 10 - _alpha * r2 + r1;
}

Результат:
Вложение:
Screenshot_1.png
Screenshot_1.png [ 8.57 КБ | 4535 просмотров ]

Почему не градиент с белого в черный?

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Вс янв 10, 2016 8:53 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Сб окт 05, 2013 9:32 pm
Сообщения: 385
Нужно смешивать не весь цвет, а каждую составляющую.
Если поделить #FFFFFF на 10 и умножить на 5 будет 0xFFFFFF/10*5 = 16777215/10*5 = 8388605 = 0x7FFFFD. Если считать целочисленно.
Нужно же найти r1_red, r1_blue, r1_green и r2_red, r2_blue, r2_green, смешать их и потом склеить.

А float в C-- нету? Тогда лучше использовать для прозрачности один байт, то есть от 0 до 255, а не от 0 до 10.
Код:
unsigned DrawMixedColor(dword _base, _overlying, byte _alpha) {
   byte b1 = byte(_base & 0xFF); _base >>= 8;
   byte g1 = byte(_base & 0xFF); _base >>= 8;
   byte r1 = byte(_base & 0xFF);
   byte b2 = byte(_overlying & 0xFF); _overlying >>= 8;
   byte g2 = byte(_overlying & 0xFF); _overlying >>= 8;
   byte r2 = byte(_overlying & 0xFF);

   byte n_a = 255 - a;

   byte r = r1*a/255 + r2*n_a/255;
   byte g = g1*a/255 + g2*n_a/255;
   byte b = b1*a/255 + b2*n_a/255;
   return dword(r)<<16 + dword(g)<<8 + dword(b);
}


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Вс янв 10, 2016 10:25 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4088
Перемога, спасибо. Флоат есть, но я не очень хорошо знаю как с ним работать.


Вложения:
Screenshot_1.png
Screenshot_1.png [ 19.24 КБ | 4508 просмотров ]

_________________
Через тернии к звездам
Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Ср май 04, 2016 3:57 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1058
В чем отличие 68.27 от обычного чтения файла, кроме автоматической распаковки файла?

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Ср май 04, 2016 2:13 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
1. 68.27 сама резервирует память для данных, 70-й функции нужно указывать, куда считывать данные
2. 68.27 не загрузит файлы размером более 16 Мбайт
3. 68.27 читает файл целиком, а 70-я может считать определённую часть - с указанного места и нужного размера
Т.к. из 68.27 вызываются подфункции 70-й функции (определение размера и считывание), то для 68.27 также должны работать относительные пути.


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Чт май 26, 2016 2:20 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
Самое главное - 68.27 автоматически распаковывает файл, сжатый kpack. Это очень удобно при загрузке ресурсов.


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Чт ноя 03, 2016 10:23 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4088
Я пробую свои силы в портировании и попытался портировать демку http://codentronix.com/projects/html5/3 ... field.html
Результат в аттаче, вот только он работает не так, как хотелось бы.
В чем ошибка?

Спойлер: Показать
Код:
#define MEMSIZE 4096*100

#include "../lib/io.h"
#include "../lib/gui.h"
#include "../lib/math.h"
#include "../lib/random.h"
#include "../lib/draw_buf.h"

proc_info Form;

DrawBufer canvas;

void main()
{
   initStars();
   loop() {
      WaitEventTimeout(1);
      switch(EAX & 0xFF)
      {
         case evButton:
            ExitProcess();
            break;
         case evReDraw:
            DefineAndDrawWindow(215,100,500+9,400+skin_height+4,0x73,0xFFFFFF,"Window header");
            GetProcessInfo(#Form, SelfInfo);
            canvas.zoom = 1;
            canvas.Init(0, 0, Form.cwidth, Form.cheight);
            break;
         default:
            if (buf_data) drawStars();
      }
   }
}

#define MAX_DEPTH 32;
#define STARS_COUNT 512

struct star
{
   int x;
   int y;
   float z;
} stars[STARS_COUNT];

int randomRange(int minVal,maxVal) {
   float rand;
   rand = random(100)/100;
   return math.floor( maxVal - minVal - 1 * rand ) + minVal;
}

void initStars() {
   int i;
   for( i = 0; i < STARS_COUNT; i++ ) {
      stars[i].x = randomRange(-25,25);
      stars[i].y = randomRange(-25,25);
      stars[i].z = randomRange(1,MAX_DEPTH);
   }
}

void drawStars() {
   float k;
   float temp;
   int i, shade, px, py, size;
   int halfWidth  = Form.cwidth / 2;
   int halfHeight = Form.cheight / 2;
   dword color;

   canvas.Fill(0);

   for( i = 0; i < STARS_COUNT; i++ )
   {
      stars[i].z -= 0.2;

      if( stars[i].z <= 0 ) {
         stars[i].x = randomRange(-25,25);
         stars[i].y = randomRange(-25,25);
         stars[i].z = MAX_DEPTH;
      }

      k  = 128.0 / stars[i].z;
      px = math.ceil(stars[i].x * k + halfWidth);
      py = math.ceil(stars[i].y * k + halfHeight);

      if( (px >= 0) && (px + 5 <= Form.cwidth) && (py >= 0) && (py + 5 <= Form.cheight) ) {
         temp = stars[i].z / 32.0;
         size = math.ceil(1 - temp * 5);
         shade = math.ceil(1 - stars[i].z * 255 / 32);
         color = calc(shade << 16) + calc(shade << 8) + shade;
         canvas.DrawBar(px, py, size, size, color);
      }
   }
   canvas.Show();
}

/*

///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ORIGINAL CODE BELOW!!!!!!!!!!/////////////////////////

    MAX_DEPTH = 32;
   
    var canvas, ctx;
    var stars = new Array(512);
   
    window.onload = function() {
      canvas = document.getElementById("tutorial");
      if( canvas && canvas.getContext ) {
        ctx = canvas.getContext("2d");
        initStars();
        setInterval(loop,33);
       }
    }

    // Returns a random number in the range [minVal,maxVal]
    function randomRange(minVal,maxVal) {
      return Math.floor(Math.random() * (maxVal - minVal - 1)) + minVal;
    }

    function initStars() {
      for( var i = 0; i < stars.length; i++ ) {
        stars[i] = {
          x: randomRange(-25,25),
          y: randomRange(-25,25),
          z: randomRange(1,MAX_DEPTH)
         }
      }
    }

    function loop() {
      var halfWidth  = canvas.width / 2;
      var halfHeight = canvas.height / 2;
     
      ctx.fillStyle = "rgb(0,0,0)";
      ctx.fillRect(0,0,canvas.width,canvas.height);

      for( var i = 0; i < stars.length; i++ ) {
        stars[i].z -= 0.2;

        if( stars[i].z <= 0 ) {
          stars[i].x = randomRange(-25,25);
          stars[i].y = randomRange(-25,25);
          stars[i].z = MAX_DEPTH;
        }

        var k  = 128.0 / stars[i].z;
        var px = stars[i].x * k + halfWidth;
        var py = stars[i].y * k + halfHeight;

        if( px >= 0 && px <= 500 && py >= 0 && py <= 400 ) {
          var size = (1 - stars[i].z / 32.0) * 5;
          var shade = parseInt((1 - stars[i].z / 32.0) * 255);
          ctx.fillStyle = "rgb(" + shade + "," + shade + "," + shade + ")";
          ctx.fillRect(px,py,size,size);
        }
      }
    }
 
 */
Вложение:
11111.gif
11111.gif [ 202.78 КБ | 2054 просмотра ]


Вложения:
space.zip [3.36 КБ]
17 скачиваний

_________________
Через тернии к звездам
Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Чт ноя 03, 2016 11:05 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 917
Leency, а вот, например, у тебя там
Код:
         shade = math.ceil(1 - stars[i].z * 255 / 32);
но shade объявлена как int
Код:
int i, shade, px, py, size;
Вообще, трудно сказать, как с-- работает, если в выражении используются смешанные типы(int и float).

Я заметил
Код:
#include "../lib/math.h"
Интересно просто стало.
Код:
        float cos(float x);
        float sin(float x);
        float sqrt(float x);
        float tan(float x);
        float abs(float x);
А вот из документации к с--:
Спойлер: Показать
Цитата:
11.14 Встроенные в компилятор процедуры.


Для некоторых процедур Вы не найдете их исходные тексты в библиотеках
компилятора. Код этих процедур генерирует компилятор. Вот список этих
процедур:

ABORT Прекращение выполнения программы
atan Вычислить арктангенс числа
atan2 Вычислить арктангенс числа
ATEXIT Зарегистрировать функцию выполняющуюся при выходе.
cos Возвращает косинус угла
EXIT Закончить программу с кодом ошибки
exp Возвращает экспоненту числа
inp/inportb Считать один байт из порта
inport Считать слово из порта
inportd Считать двойное слово из порта
fabs Возвращает абсолютное значение числа
log Вычисляет натуральный логарифм числа
log10 Вычисляет десятичный логарифм числа
outp/outportb Записать один байт в порт
outport Записать слово в порт
outportd Записать двойное слово в порт
sin Возвращает синус угла
sqrt Извлечь квадратный корень через FPU.
tan Возвращает тангенс угла
Похоже, что товарищ велосипедист, снова изобрёл очередной велосипед :mrgreen:


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Чт ноя 03, 2016 11:32 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4088
Ошибаешься, math.h писал не я.

В оригинальном коде var shade = parseInt((1 - stars[i].z / 32.0) * 255);
У меня переменная int shade. Что здесь не верного?
Да и вообще, shade - это просто цвет, с ним проблем нет.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Чт ноя 03, 2016 11:42 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 917
Ну может тогда с random что-то не так. Или где-то происходит ненужное преобразование float в целое. Тебя не устраивает, что звёзды на других местах?
Цитата:
Ошибаешься, math.h писал не я.
Так я и не про тебя же :) На svn написано, кто автор кода. Просто он уже не в первый раз велосипед изобретает :lol:


Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Пт ноя 04, 2016 1:44 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4088
Я его побеждат.


Вложения:
starfield.zip [4.02 КБ]
16 скачиваний
starfield_final.gif
starfield_final.gif [ 741.06 КБ | 2011 просмотров ]

_________________
Через тернии к звездам
Вернуться к началу
 Заголовок сообщения: Re: Помогите новичку
СообщениеДобавлено: Пт ноя 04, 2016 4:32 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 917
Leency, молодец, прикольно :)

Там, кстати, на сайте есть ещё picolzo, его тоже не трудно портировать, по крайней мере, оно у меня запускалось в PELoad
http://www.c--sphinx.narod.ru/FILES/picolzo.zip


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 1093 сообщения ]  На страницу Пред. 169 70 71 72 73 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB