С чего начать изучение SQL?
Начал изучать БД по этому сайту: https://site-do.ru/db/ (SQL-MySQL)
А потом, вдруг, стал понимать, что существуют разные среды, грубо говоря и диалекты языка
И у меня соответственно созрел вопрос: правильно ли Я начал изчение БД (через тот сайт)?
Не хотелось бы зря потратить время на изучение не того, что нужно.
- Вопрос задан более трёх лет назад
- 9658 просмотров
1 комментарий
Простой 1 комментарий
full_stack_newbie @full_stack_newbie
Все верно поняли, диалекты SQL разные, и реализация аналогичного функционала в разных СУБД может отличаться, существенно (не только по причине диалекта, но и от механизмов самой СУБД).
Я порекомендую так:
1. Выбрать СУБД с которой предполагается работать.
2. Прочитать официальную документацию и поковырять примеры которые в ней есть.
3. Начать что-то разрабатывать, а в процессе уже статьи или узко-специализированная литература.
Решения вопроса 1
существуют разные среды, грубо говоря и диалекты языка
разница настолько несущественная для тебя, что тебе не надо даже заморачиваться на эту тему. для решения 80% задач разработчики пишут весьма типичный стандартизированный SQL. даже не заморачивайся на эту тему.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 6
Saboteur @saboteur_kiev Куратор тега IT-образование
software engineer
Не хотелось бы зря потратить время на изучение не того, что нужно.
Вот это меня постоянно удивляет у новичков — боятся изучить что-то не нужное, еще даже не начав что-то учить.
Пока не дошли хотя бы до уровня мидл разработчик не стоит отбрасывать что-либо. Потом уже сможете сами оценивать реально что нужно, а что нет.
А до этого уровня — любые знания будут вам только добавлять опыта и интуиции.
Ответ написан более трёх лет назад
Комментировать
Нравится 8 Комментировать

Dimonchik @dimonchik2013
non progredi est regredi
И у меня соответственно созрел вопрос: правильно ли Я начал изчение БД (через тот сайт)?
Заблудились два грибника. Еле передвигая ноги, вышли они на опушку.
А там прапорщик стоит. Они его спрашивают:
— Товарищ военный, мы на станцию правильно идем?
— Да какое там правильно? Голеностоп вихляет, удар стопы не четкий, да и вообще не в ногу.
Ответ написан более трёх лет назад
Нравится 5 1 комментарий
Den4_x @Den4_x Автор вопроса

Рональд Макдональд @Zoominger Куратор тега IT-образование
System Integrator
Какая-то очередная унылая подборка статей от Васяна.
Я бы всё-таки советовал книгу, их полно и информация в них наиболее полная.
Ответ написан более трёх лет назад
Нравится 1 2 комментария
Den4_x @Den4_x Автор вопроса
Абсолютно с вами согласен и поэтому решил сначала изучить изи статейки, чтобы потом перейти на книгу, которую я уже выбрал, она считается достаточно крутой, как я понял, среди БД-ов.
НО вопрос то, не в том, что это неполное руководство к изучению SQL запросов.
В данный моент, я несовсем понимаю, в правильном ли я направлении двигаюсь в изучении БД. Иными словами, изучение БД(SQL запросов) начинается с таких тем, как в этом сайте или я изучаю совсем не то, что на самом деле НУЖНО?

Рональд Макдональд @Zoominger Куратор тега IT-образование
Den4_x, учите язык SQL, он же универсальный. Параллельно можно по архитектуре БД что-нибудь почитать.
Почему стоит начать изучать SQL
SQL или язык структурированных запросов, поначалу может показаться сложным и пугающим. Этот язык в основном применяется для определения, обработки и запроса данных, которые хранятся в реляционных базах данных — это такие БД, в которых данные хорошо организованы и структурированы, чтобы соответствовать четко определенным строкам и столбцам.
С момента появления SQL в 70-х годах его популярность выросла, а области применения значительно расширились. Сейчас SQL – это проверенный и распространенный способ запроса и обработки данных в разных отраслях, и это осуществляется с помощью популярных утилит. Скорее всего, вы столкнетесь с SQL на работе, если вы администратор или архитектор базы данных, инженер-программист, аналитик данных. Но даже если вашей профессии нет в списке и вы не используете SQL напрямую, разобраться с тем, как он работает, все равно полезно.
В этой статье мы расскажем, почему стоит изучать SQL, а также где и как вы сможете применить эти знания.
SQL и реляционные базы данных
Если вы работаете с любой реляционной базой данных – MySQL , PostgreSQL , Microsoft SQL , Oracle SQL или тд., вы обязательно используете операторы SQL. Этот язык задействуют для определения, обработки и запроса данных в БД такого типа. Это основной способ взаимодействия с механизмом БД.
Сегодня многие системы баз данных работают с простыми инструментами графического интерфейса, однако SQL не устаревает от этого. Простые задачи можно быстро решить и без SQL, но более сложная обработка данных потребует применения SQL для построения запросов.
С помощью SQL можно запрашивать нужные данные и делать это эффективно, если вы знаете сильные стороны механизма БД.
Понимая SQL, вы сможете быстро освоить практически любую современную реляционную систему баз данных. И ваши знания не будут ограничены программным обеспечением.
Применение SQL в других областях
Благодаря своей популярности SQL нашел свое применение в других СУБД и инструментах анализа данных.
SQL и его аналоги поддерживаются во многих системах и механизмах анализа данных, утилитах бизнес-аналитики и инструментах интеллектуального анализа данных, включая нереляционные и аналитические (OLAP) базы данных, а также для работы с большими данными.
Если вы столкнетесь с любым программным обеспечением для анализа больших массивов данных, то, скорее всего, вы сможете применить свои знания SQL. У вас также будет возможность применить аналогичный подход с разными базами данных, это сделает работу доступной и универсальной для разных источников данных. Как видите, в результате знание SQL является основополагающим, оно часто необходимо специалистам по анализу данных.
SQL входит в первую десятку самых популярных языков программирования согласно TIOBE Programming Community index (индекс популярности языков программирования).
SQL помогает общаться с людьми о данных
Обсуждение данных часто может быть сложной задачей, поскольку люди могут немного неправильно понимать друг друга. Чтобы избежать неоднозначностей в общении с коллегами, полезно знать основы SQL.
Даже если вы не будете писать SQL запросы, ваши знания пригодятся для того, чтобы точно выразить свои требования и ожидания. Вы также сможете точно определить проблемы в полученных данных и дадите понятную и действенную обратную связь аналитикам, которые подготовили данные для вас.
Получается, что SQL – это универсальный язык, который понимают все, кто работает с данными. Даже если вы не столкнетесь с SQL напрямую, знание концепций SQL поможет вам наладить коммуникацию.
На SQL создают лучшие базы данных
При создании любой базы данных важно учитывать, какие данные будут храниться в ней, как к ним будет осуществляться доступ и как их будут обрабатывать в будущем. Можно создавать базы данных, основываясь исключительно на хорошем знании проектирования БД, но переход от теории к практике может быть сложным и подкинуть сюрпризы.
Получить любые данные из базы можно с помощью SQL-запроса, написанным аналитиком данных или созданным с помощью программного обеспечения. Понимая модели использования и умея переводить их в разные SQL-запросы, вы будете заранее знать, как SQL будет обращаться к основной базе для получения данных, и что должен будет сделать механизм БД, чтобы ответить на такой запрос.
Также эти знания можно применить для разработки баз данных, соответствующих поставленной цели. Принимая во внимание варианты использования, которые должна поддерживать база данных, вы можете выбрать структуру, которая позволяет выполнять необходимые запросы проще и эффективнее.
Вы сможете продуманно структурировать таблицы, а также использовать типы данных, отношения внешних ключей и индексы для облегчения доступа к данным. По сути, вы научитесь проектировать базы данных, более подходящие для ваших целей.
SQL помогает разрабатывать приложения
Современные платформы разработки программного обеспечения и популярные веб-фреймворки – Laravel , Symfony , Django или Ruby on Rails , – часто используют уровни абстракции данных, например объектно-реляционные преобразователи . Это нужно, чтобы скрыть сложность доступа к данным от разработчика. При работе с такими платформами вы не будете взаимодействовать с SQL напрямую. Простой и понятный синтаксис, типичный для фреймворка, сделает так, что все будет “просто работать”, а нужные данные станут доступными.
Но сколько бы сокращений и упрощений не предоставляли фреймворки, основной механизм базы данных будет запрашиваться с помощью SQL-запроса, который создан на основе ваших данных.
Понимание принципов работы SQL поможет вам задействовать возможности фреймворка, чтобы сделать запросы более быстрыми и эффективными.
Вы также сможете легко решить любую проблему, связанную с запросом данных и их обработкой. Механизмы БД часто выдают ошибки из-за неудачно выполненного SQL-запроса, но это затрудняет отслеживание проблемы. Понимая ошибки базы данных, вы можете точно определить проблему.
И последнее, но не менее важное: вы будете знакомы с угрозами безопасности, которые возникают в результате неправильных SQL-запросов (например, внедрение SQL-кода ).
Зная SQL, вы будете полностью контролировать процесс доступа к данным и неважно, используете ли вы SQL напрямую или будете работать с программными абстракциями и инструментами ORM в рамках фреймворков.
SQL легко выучить
Понимание и применение языка структурированных запросов на практике имеет много плюсов, но самое главное – это его доступность для начинающих, так как он четко описывает свои действия. В его синтаксисе для названия операций, фильтров и других модификаторов используются в основном обычные английские слова. SQL-запросы часто можно прочитать как английские предложения и быстро понять, о чем идет речь, даже не имея опыта программирования.
Существуют более сложные и комплексные аспекты языка, которые могут показаться запутанными и потребовать значительных усилий. Но основы SQL можно понять и изучить на базовом уровне. Вы можете начать с самых основных понятий SQL и пополнять свои знания всякий раз, когда вам нужно ИЗВЛЕЧЬ некоторые данные способом, которым вы раньше пользовались. С SQL легко экспериментировать, что делает его безопасным и надежным.
Изучив SQL, вы получите много преимуществ, узнаете новые методы получения и анализа данных из различных источников. А также сможете стать специалистом в области анализа данных и открыть новые возможности для карьерного роста в различных областях.
Заключение
Благодаря своей гибкости, простоте использования и популярности в разных областях, SQL является распространенным языком запросов и обработки данных. Его изучение принесет много плюсов, даже если ваша основная работа не связана с базами данных или созданием программного обеспечения напрямую.
С чего начать изучение SQL?
Вот этот сайт www.sql-ex.ru рекомендую. Там так упражнения подобраны, что можно все возможности SQL освоить, и понять для чего они нужны.

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
176 коментарів

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Хорошая книга. Но неизвестно насколько вам именно нужен T-SQL.
www.amazon.com/. zik-Ben-Gan/dp/150930200X
Коментар порушує правила спільноти і видалений модераторами.
Мова програмування баз даних
SQL — це не мова програмування
SQL-это слабо структурированный (описательный) язык программирования.
Переучите их заного 🙂
Если отбросить формальности и учитывать, что на многих проектах люди пишут всю бизнес логику в SQL, то очень даже язык программирования и даже функциональный слегонца.
Ruslan Kovalov Software Engineer в Crate.io 01.05.2018 12:26
BI developer,
Это еще что за лычка?
Business Intelligence (BI) Tools | Microsoft Azure
Коментар порушує правила спільноти і видалений модераторами.
Коментар порушує правила спільноти і видалений модераторами.
и как оно? получился BI developer с 2 годами опыта?
Елена, можно учиться по видео курсам ITVDN
1) SQL Essential (itvdn.com/ru/video/sql-essential )
2) Выполнение домашнего задания по курсу SQL Essential (itvdn.com/ru/video/sql-homework)
3) How to SQL Essential (itvdn.com/. ideo/how-to-sql-essential)
4) SQL Практикум (itvdn.com/ru/video/sql-workshop)
Проконсультироваться по непонятным вопросам можно прямо у авторов курсов в нашем учебном центре. Или просто пройти двухнедельный курс SQL Essential. Ближайший старт 9 и 21 марта. И, кстати, в марте для девушек акция — скидка на обучение и подписка на ITVDN в подарок.
она уже мидл+ (или забила) больше 2 лет прошло
найти ментора будет самы легкий вариант 🙂
Я думаю пойти на курсы скорее, что я и сделаю, как только разберусь с универом + самообучение дома, без этого никак.
Тимофей Шумаков Data Engineer / Business Intelligence Developer в Tiresian 08.04.2015 23:49
Осмелюсь высказать крамольную мысль о том, что будущему биай девелоперу не с эскьюэля начинать нужно.
Andrzej Baczynski Outsourcing CEO, PM 06.03.2016 00:00
Хотелось бы узнать с чего же тогда стоит начать?
действительно интересно с чего? как по мне, так действительно с SQL
Начинать с SELECT, INSERT, UPDATE, DELETE и переходить к другим конструкциям как освоитесь. Создайте базу данных чего угодно (домашней библиотеки, городских кафе, интернет-форума) с несколькими таблицами и тренируйтесь. Для того, чтобы разобраться с синтаксисом возьмите документацию СУБД, например www.postgresql.org/. ractive/sql-commands.html.
На этом этапе становится очевидным, что учить SQL без изучения реляционных СУБД не получиться. Порекомендую курс «Introduction to Databases» от Стэнфорда, там рассказывается не просто про SQL, но и про данные в общем, и про различные способы хранения структурированных и не структурированных данных. При этом, несмотря на такие слова как «реляционная алгебра» никакого специального математического образования для него не требуется, все рассказывается поэтапно, доступным (правда английским) языком.
Если у вас уже есть опыт программирования, то обратите внимание, что SQL — язык необычный, он не процедурный (как Java, PHP или C++), а декларативный, то есть конструкции языка описывают каким должен быть конечный результат (выбрать колонки фио и номер телефона из таблицы пользователи), а не последовательность действий для его достижения (последовательно просканировать таблицу пользователи, выбирая каждую встреченную запись, и из результата оставить только колонки фио и номер). Это — важная деталь для понимания, как работают реляционные СУБД, я встречал Java разработчиков с многолетним опытом, которые не понимали этой особенности и в результате пытались действия по фильтрации результатов запроса перенести в приложение, создавая в результате плохие запросы и медленные приложения.
Как лучше изучать SQL с нуля

Не тайна, насколько важен навык работы с базами данных, особенно для современных и быстроразвивающихся технологий.
Обычно знание базы данных начинается с знакомства с SQL (Structured Query Language — структурированный язык запросов)
Данный язык обрабатывает все входящие данные, которыми пользователи делятся с сайтом. Все полученные данные хранятся и обрабатываются в базе данных.
Теперь, постараемся рассказать о том, как лучше сделать первые шаги в сторону изучения SQL.
Почему важно знать SQL?
Для начала ответим на вопрос. Почему именно SQL так популярен? По пунктам:
1. SQL имеет огромный спрос на рынке труда. Знание SQL требуется в совокупности к знанию многих языков программирования. Это и является также причиной востребованности знания работы с базами данных.
2. Универсальность — сфера применения крайне обширна. От крупных IT-компаний до гос.учреждений.
3. Плавная кривая обучения. Основное отличие SQL от большинства языков — это то, что SQL имеет структуру на основе поступающих запросов. SQL даёт пользователям инструменты, с помощью которых он сможет удобно управлять базами данных.

Практические советы наших подписчиков по изучению SQL:
Теперь перейдем к практическим советам от наших подписчиков о том, как лучше подойти к процессу изучения SQL:
Ежедневно используя SQL в своей работе, я посоветовал бы начать решать задачи на сайте sql-ex.ru , задачи идут по нарастанию сложности и имеют сопутствующую теорию, следует за теорией в книжки лишний раз идти уже не нужно. Спустя 35-40 задач у вас уже сформируется целостное представление о SQL и уже после этого, можете приступать к соответствующей литературе, что как раз таки после пройденной вами практики будет легко восприниматься. По книгам советующее следующее:
— SQL Полное руководство — описываются все возможности SQL.
— Официальное руководство по PostgreSQL — в случае если выбрали PostgreSQL , то официальное руководство имеет исчерпывающую информацию, более вам вряд ли что понадобится.
— Введение в системы баз данных от автора C.J. Date — максимальное компактное описание того, на чем основывается SQL — разобраны подробно основные понятия, предложены задачи. Хорошая книга.
Книги не особо советую, по своему опыту лишь сужу — они мною или были заброшены или с трудом читались, но знания из них получать мне никакого удовольствия не было, не моё это. Лично я решила приступить к изучению с практики, поэтому:
sql-ex.ru и pgexercises.com — практические задачи , параллельно на данных сайтах также сможете изучить необходимую вам теорию и применить её тут же на практике. Поработать получится как с сложными запросами, так и с примитивными. Как освоите азы SQL, уже думаю можно переходить к книгам, если данный способ получения информации для вас приемлем и вы довольно таки усидчивы. Либо советую искать документацию по интересующей вас СУБД (Система управления базами данных)
Если вы полный ноль в SQL, коим и я был год назад — советую книгу «Освой самостоятельно SQL за 10 минут».
Будет очень хорошо, если вы не просто будете читать книгу, а параллельно заниматься практическим применением полученных вами знаний к примеру на таких сайтах как:
После того, как набьете руку на практических задачах , советую перейти к книге Святослава Куликова “Работа MYSQL, MS SQL SERVER и ORACLE в примерах”. Тут определяетсь с базой данных. Если это SQL Server, то скачиваете на торренте данную СУБД. Если Oracle, то скачиваешь образ для WMvare с их сайта, или используешь их online СУБД.
Подводим основные итоги:
Теория и практика должны быть неразделимы при вашем изучении SQL. Книги и открытые источники теоретической информации это прекрасно, но если полученные вами знания не будут применяться на практике, то вся изученная вами теория будет потихоньку забываться.
Если вас интересует IT его перспективы в РФ ,
публикую также свои статьи и интервью на канале t.me/it_begin
Подписывайтесь, если будет интересно 😉
Поддержать

1 год назад
Реклама, причем некачественная
1 год назад
И да, в довесок.
на работе есть/были несколько имбицилов, которые вдруг решили, что они мега инженеры и могут спроектировать модель. Результат — базёнки, где нет народного сука, НИ ОДНОГО. Форейгн Кея, в реляционке блять. Ни одного форегна. Но и это ещё не всё! На уровне сервиса на инсерте проверяют, а есть ли запись с таким id. Блять
проект росатома умный город
раскрыть ветку
1 год назад
Если это SQL Server, то скачиваете на торренте данную СУБД.
Зочем? С незапамятных времен для MS SQL Server есть две бесплатных редакции — Developer и Express, которые можно скачать прямо с официального сайта.
Теперь перейдем к практическим советам от наших подписчиков о том, как лучше подойти к процессу изучения SQL
Кто эти люди и с какого рожна их мнению стоит доверять?
1 год назад
Пролистал поперек. После «Мария: книги не нужны. приступаю к практике», что можно перевести: я не хочу чё-то там изучать, при любой задаче я буду заёбывать профи, что бы они мне, тупой пизде, объяснили на понятных для меня пальцах, чё такое idef0 без упоминания всей вот этой абракадабра. Вот после этого могу только одно: тс иди на хуй
раскрыть ветку
1 год назад
Ага. И все как один посоветовали один и тот же сайт. Ага. Ага. Я бы посоветовал автору записаться на курсы обучения рекламе, чтобы не гнать настолько очевидную рекламу. И кстати @moderator как такие рекламные посты сочетаются с правилами сервиса?
раскрыть ветку
Похожие посты
40 минут назад

Так вот почему всех программистов красные глаза! Они просто в душе коммунисты!

2 часа назад

Когда первый раз пытаешься выйти из Vim
1 день назад

Так станет проще работать

2 дня назад

Как проклятие невидимой стены ждало меня 20 лет
- Автор:kesn
- Больше интересных фото и комментариев воригинале материала

Когда на меня накатывает хандра, я бросаю всё и пилю свой игровой движок. Это неблагодарное занятие, но меня прёт.
В самом начале у меня были такие планы: вжух-вжух, щас возьму ведро, накидаю туда всяких библиотек для графики, физики и звуков, добавлю сетевую библиотеку по вкусу, перемешаю всё с какой-нибудь системой сообщений, и готово. Приключение на 15 минут.
И вот я тут спустя 5 лет.
Ладно, если быть честным, то я почти не уделял времени разработке, потому что постоянно спотыкался на всяких бесящих меня ошибках: то сериализация не работает с наследованием, то потоки не хотят нормально разделять память, то обновление языка ломало совместимость… Я могу, блин, целую Камасутру написать про соитие с игровым движком. Все эти ошибки сильно демотивируют, потому что хочется уже наконец-то заняться делом, а не ковыряться с байтиками.
Это не моё видео, но оно очень точно передаёт, как у меня происходит разработка:
С другой стороны, конечно, когда эти проблемы решаешь, чувствуешь себя богом и королём жизни, и после этого ты вроде как опять хочешь программировать. И даже кажется, что это была последняя трудность. Ха-ха, наивный. Но мне это нравится. Типа как альпинисты идут в гору и страдают, когда можно пойти в бар с друзьями и попить пивко. Каждому своё.
Ну и вот про одну такую ошибку я хотел поговорить. Есть такой движок — ODE (Open Dynamics Engine). Он появился где-то в палеолите, динозавры его накодили, от документации остались только царапины на скалах. Но он работает, он простой в использовании, и у него есть сишные заголовки, поэтому я мог просто написать враппер на Nim и использовать его в своём движке. В Nim вообще ни хрена нету, поэтому канонический способ — это взять какую-нибудь библиотеку из Си, научиться её вызывать, а потом говорить всем, что ты написал крутую программу на Nim.
Итак, сначала я просто добавил кубики на сцену и отрисовал их. Физический движок был в полной гармонии с графическим, и когда мне графика отрисовывала, что я приближаюсь к кубу и толкаю его, кубик действительно отлетал и вращался. Короче говоря, всё шло так, как я и планировал.
Разумеется, если вы не планируете делать Minecraft, то вам может понадобиться что-то поинтересней, чем кубик. В ODE есть специальный класс Trimesh, который как раз позволяет вам сделать сложную геометрию. Фактически, вы можете создать любое тело из набора треугольников. Типа такого:

Машина глупая, поэтому мы не можем ей сказать «нарисуй зайца», мы можем ей сказать «вот такие есть вершины, соедини их вот так-то, и это будет называться зайцем». Я, естественно, не стал рубить с плеча и решил вместо зайца сделать простой треугольник и проверить, что всё корректно с ним работает.

Я создал треугольник, он успешно отрисовался на сцене, я начал ходить по миру… и обнаружил, что треугольник не в том месте, где нарисован, а где-то непонятно где.
Так и появилась эта дурацкая невидимая стена.
Фактически, я мог ходить по сцене, и где-то я упирался в тот самый треугольник, который вообще-то должен был быть там, где нарисован. Я в принципе даже что-то такое и ожидал, потому что, как я уже где-то писал, только три раза в своей жизни я написал код, который заработал с первого раза. Наверняка я где-то перепутал координату — вместо X передал Y, или наоборот, ну что-нибудь такое. Эти программисты, вы знаете!
Отрисовать этот треугольник я не мог, потому что координаты были правильные, графический движок всё отрисовывал правильно, но вот физический движок как-то неправильно интерпретировал мои правильные данные. Поэтому я стал ходить по миру и пытаться определить очертания этой невидимой стены. В конце концов я её нашёл (она была достаточно странной), и я решил немного подвигать треугольник, чтобы посмотреть, как он влияет на эту стену. Казалось бы, если я просто где-то перепутал координаты, то подвинув треугольник, я немножко подвину эту стену. Но хрен мне там! Стена исчезала и появлялась совершенно случайно, прыгала далеко даже от малейшего изменения координат, и я не мог понять, почему.
И тут я вспомнил эту недалёкую женщину из заЩИТников! Если кто не знает, она сделалась невидимой и решила спрятаться в дожде. Отличный план, надёжный, как швейцарские часы:

Я подумал, что это прям мой случай, и решил полить свою стену дождём, чтобы увидеть её. Дождя у меня не было, зато были кубики, поэтому я создал штук 50 и стал кидать их вниз. При касании стены они к ней прилипали, и я мог видеть её очертания. А когда что-то видишь — отлаживать в разы легче!

Что ж… Это была хорошая попытка понять, по какому закону стена появляется в том месте, где она появляется, но это мне ничего не дало. Даже видя эту стену, я не находил никакой закономерности.
Если нужно где-то найти таких же неудачников, как я, то самое лучшее место для этого — интернет. И я нашёл его — единственного человека, который отстрадал своё и рассказал об этом. Представляете, в 2006 году у какого-то чувака из Германии пятая точка горела точно так же, как у меня сейчас! Не знаю, что он выкурил (похоже, что исходники), но, ОКАЗЫВЕТСЯ, физический движок ожидает от вас трёхмерные точки, но передавать их надо как четырёхмерный вектор, просто в четвертой координате надо поставить мусор, типа так: [x1, y1, z1, 0, x2, y2, z2, 0, . ]. Скажите, как по const dReal* Vertices я должен понять, что там ждут в гости четырёхмерные вершины?

За что я люблю опенсорс — можно всегда докопаться до истоков всего. Я полез в исходники, и вот что обнаружил.
В 2003 году пришёл Russel Smith и добавил всю эту функциональность с trimesh collisions, в том числе интересующую меня строчку:

Тут всё понятно, потому что в определении чётко говорится, что dVector3 — это четырёхмерный вектор (есть некий шарм в этой логике).
А потом через пару месяцев врывается Erwin Coumans и переписывает так, чтобы тип был непонятен:


И только представьте себе, через 20 лет это изменение находит какого-то чувака (меня), который пишет вообще на другом языке программирования, и заставляет этого чувака гореть в тщетных попытках понять, какого хрена не работает.
Я переписываю код с добавлением четвертой координаты, и все начинает работать.

Вообще этот пост был задуман как развлекательный, типа «смотрите, погромист опять страдает, хахаха». Но мне кажется, что он поднимает достаточно глубокую проблему: как только вы выкладываете код, он начинает свой долгий путь сквозь время. Никто не знает, когда и кто его будет читать — может, вы или ваш коллега через пару месяцев, может, тысячи независимых разработчиков через пару лет, может, какой-то парень с горящим продом.
Получается такой вот эффект бабочки, как с этой невидимой стеной. Поэтому когда вы в следующий раз сядете писать код, представьте, что какой-то разраб через 20 лет будет в нём разбираться, и, пожалуйста, постарайтесь сделать жизнь этого чувака хоть чутоку легче. Ведь однажды этим кем-то можете оказаться вы сами.
Не только лишь все могут смотреть в будущее, но вы сможете, если подпишетесь на мой уютненький канал Блог Погромиста.
А ещё я держу все свои яйца в одной корзине (в смысле, все проекты у одного облачного провайдера) — Timeweb. Поэтому нагло рекламирую то, чем сам пользуюсь — вэлкам.
Показать полностью 9 1
2 дня назад

Если ты ростом ниже 185, то даже знание плюсов тебе не поможет

5 дней назад

Интересно, а сколько разработчиков в мире используют только свой код?

Показать полностью 1
8 дней назад

Как сказать на английском «так и не»
Мы используем эту фразу, чтобы выразить сожаление, недовольство, досаду от того, что пока что-то не сделали. В английском эту мысль можно выразить так:
NEVER + Past Simple
I NEVER watched that video
Я ТАК И НЕ посмотрел это видео
I didn’t watch that video yesterday (просто Past Simple) — Я не смотрела вчера это видео
I haven’t watched that video = I’ve never watched that video (Present Perfect, опыт) — Я не смотрела это видео
Это просто констатация факта. А фраза I never watched. как раз передаёт эмоции сожаления, досады о несделанном.
— Have you watched the video that I sent you?
— No, I never watched it, didn’t have time
— Ты посмотрел видео, которое я тебе прислал?
— Нет, так и не посмотрел, не было времени
Если используем отрицательное слово NEVER, то не будет второго отрицания:
Он ТАК И НЕ пришёл
She NEVER called me
Она мне ТАК И НЕ позвонила
But it NEVER happened
Но этого ТАК И НЕ произошло
Больше полезных фраз в Telegram.
Показать полностью
Поддержать
9 дней назад

Раздача игры Medieval After Summer на Itch.io в жанре стратегии-симулятора
Medieval After Summer — стратегия-симулятор средневековых рыцарских боев


Перед боем у вас есть выбор: перепрыгнуть или атаковать врага, после победы выбор: подобрать один из предметов врага или улучшить свой.
Автоматический бой всадников с возможностью помощи своему персонажу делает бой более требовательным в плане правильного выбора предметов и противника.
Синергия и противодействие предметов делают игру невероятно сложной, где нет места росту в стиле «рогаликов» .
- Обновлено : 6 дней назад
- Опубликовано : 28 мая 2023 г.
- Статус : выпущен
- Платформы : Windows, macOS, Linux, Android
- Оценка: 5,0 из 5 звезд
- Автор : SereDim
- Жанр : Стратегия
- Теги : авто, автобой, выбор, бой, жесткий, Инди, быстрый, езда, выбор, Простой
Показать полностью 2
Поддержать
11 дней назад

Гилфойл ерунды не скажет

Показать полностью 1
11 дней назад

Что заставляет программистов писать вирусы
Материал был взят и переведен с Рэддита. Приятного прочтения!
1. В 7 классе я ходил на кружок программирования, который фактически превратился в кружок по созданию вредоносных программ. Мы с другом написали программу, которая постоянно открывала на компьютере один сайт для взрослых и врубала звук на полную мощность. У нескольких человек этот сайт открылся прямо на уроке. Было весело.
2. Я написал эту программу ради азарта. Это был аддон для Воркрафта. Он запускался, когда персонаж входил в игру. А потом персонаж получал приглашение в гильдию от игрока с заряженным аккаунтом и сам становился главой гильдии. После этого можно было идти в игровой банк и забрать оттуда все ценное. Написать код было просто, но вот протестировать его работу с помощью приемов социальной инженерии очень сложно. Но мне повезло с первого раза. Прилив адреналина был колоссальным, но я также понимал, что меня, скорее всего, забанят в этой игре. Моей следующей целью была высшая рейдерская гильдия на сервере. Чтобы убедить лидера гильдии участвовать в моем тестировании, понадобился час разговоров по скайпу. Он попался на крючок, и все почти получилось. Я знал, что у этой гильдии игровых ценностей на сотни тысяч долларов. Глава установил аддон, но потом я понял, что он вошел через альтернативного персонажа, не имевшего доступ к богатству гильдии. Так у меня все провалилось. Меня выгнали из гильдии и забанили. Позже мне удалось вернуть свой аккаунт, но без тех ценностей, которые я награбил раньше.
3. В юности я создал несколько троянов удаленного доступа. С их помощью воровал аккаунты в разных играх и продавал их в интернете. Когда я впервые запустил троян, было 200 загрузок и 90 заражений. Половину угнанных аккаунтов я отдал другу, который помогал писать программу. Потом продал два акка и купил попугая, потому что люблю птиц. А потом старший брат объяснил, что все это плохо и незаконно, и я остановился.
4. Раньше вирусы создавались ради демонстрации крутости и были не особо вредными, это во времена Дос и вплоть до Виндовс XP. Потом появились черви для кражи паролей. Потом ботнеты, а они уже только ради денег. Они крадут данные, пароли, откровенные фотки, все подряд, для последующей продажи. Потом киберпреступники научились использовать сторонние компьютеры для майнинга, взлома сайтов и прочего дерьма.
5. У меня есть друг, который мошенничал с кредитками, крал личные данные, информацию с компьютеров, используя для этого кейлоггер, замаскированный под ссылку для скачивания. В школе он начал продавать вещи и одежду всем, включая меня. А через два года за ним приехали из ФБР и увезли, хотя он и был несовершеннолетним. Ему пришлось заключить сделку и вернуть товаров на 50 тысяч долларов. А еще он взломал главу отдела безопасности Xbox, про это есть видео на ютубе.
6. Когда-то я любила троллить людей в чатах, рассказывая, что у меня есть постеры с Бритни Спирс, но для их закачки надо открыть файл, который я пришлю. Так я получала доступ к компьютерам жертв. Могла полностью просматривать жесткий диск, скачивать, что мне надо, удалять с компьютера файлы. Однажды я стала удалять кучу всего с компьютера парня, с которым в это время общалась в чате, и он заплакал. Мне стало жаль его, и я прекратила, и больше никогда этим не занималась.
7. Я занимался этим ради денег. Уже в старших классах я занимался черным СЕО и восстановлением сайтов. Потом я познакомился с парнем, который придумал, как через песню из альбома вшить ссылку. Эта программа случайным образом одну из песен на компьютере превращала в ссылку. Когда человек хотел прослушать ее, всплывала надпись, что надо скачать кодек. Он скачивал, и я получал 10 центов. Свою ссылку мы размещали на торрентах, скачиваний было много, денег хватало. Позже я стал нанимать индусов, чтобы они распространяли по торрентам файл с этой ссылкой. Мне тогда было 16, и я за месяц заработал 4 тысячи долларов. Это было круто, учитывая, что на черном СЕО и сайтах у меня выходило около тысячи в месяц. А через несколько месяцев все пошло наперекосяк, и я стал заниматься другими делами.
Похожие подборки без цензуры и купюр ежедневно выходят на моем канале https://t.me/realhistorys
Всем здоровья и добра!
Показать полностью
Поддержать
11 дней назад
Дорогу осилит идущий
Я учу людей языку программирования Java. Бесплатно. Совсем бесплатно. Прям даром. И даже без рекламы. Совсем без рекламы. Вот вообще.
Ссылка на тг: Дорогу осилит идущий. Java
С чего все началось: Помогу с изучением Java. Бесплатно. Не реклама:)
В свое время я опубликовал пост, в котором предлагал помощь в изучении Java всем желающим. Сегодня этой инициативе исполняется год.

Год бесконечных, по крайней мере, в моем восприятии, статей, обсуждений и ревью. Год новых знакомств, холиваров и необычного опыта.
Год, за которое сформировалось уютное, как мне кажется, и живое комьюнити. Комьюнити, готовое помогать новичкам в чатах, отвечать на вопросы и делиться опытом.
В этом посте не будет итогов или стенаний об усталости. Лишь благодарность людям, которые поддерживали меня и канал все это время.
Тем, кто готов делиться знаниями и тратить на это свое время. Совсем недавно мы провели первый вебинар и в скором времени планируем второй. Надеюсь, все участники остались довольны:)
Тем, кто готов разбавлять публикации уроков чем-то необычным — например, интервью с подписчиком. Кажется, оно получилось отличным и, во многом, мотивирующим.
Тем, кто добровольно вычитывает статьи, находя бесконечные грамматические ошибки. Именно благодаря этим людям я кажусь не совсем безграмотным:)
Тем, кто задает вопросы и искренне пытается разобраться в изучаемых темах. И тем, кто на эти вопросы отвечает и не менее искренне пытается помочь.
Тем, кто пишет слова благодарности и поддержки.
Именно благодаря всем этим людям «Дорогу осилит идущий» живет и развивается.
Мы уже прошли долгий путь — от самых основ синтаксиса, через Java Core, многопоточность и SQL. Начали знакомство с системами сборок.
Конечно, идти хотелось бы быстрее. И поэтому отрадно видеть людей, которые начинали (или продолжали), когда канал только зарождался, а теперь уже стали Java-разработчиками. Они все еще в пути, но уже намного дальше:) Вдвойне приятно, когда эти люди остаются активны и уже сами помогают новичкам. Или пишут и советуются уже по вопросам, связанным с коммерческой разработкой.
А у нас все еще впереди. И свою дорогу мы тоже проползем пройдем!
Как и всегда, буду искренне рад тем, кто захочет присоединиться:) Вместе шагать веселее
P.S. Когда-то я говорил, что блек джек и шлюхи тоже будут. У ребят, которые устроились на работу — уже есть, для остальных — пока только показываем

Показать полностью 2
12 дней назад

Как понимать мемы про айти?

12 дней назад

3D видеокарта-«декселератор» из 90-х. Как работала S3 ViRGE «под капотом»?

Друзья! Многие ли из вас застали такую легендарную видеокарту, как S3 ViRGE? Когда-то этот GPU стоял чуть ли не в каждом втором офисном компьютере: благодаря дешевизне и заявленной поддержке 3D-ускорения, эту видеокарту просто сметали с полок магазинов. Далеко не все могли себе позволить ATI Rage, Riva TNT и уж тем более 3dfx Voodoo и очень разочаровывались в свежекупленной видеокарте, когда пытались поиграть в новомодные игры тех лет. На момент написания статьи, в сети слишком мало материала о том, как работали видеокарты 90-х «под капотом», однако мне удалось найти даташит на видеочип, SDK для программирования 3D-графики специально под него и некоторую документацию. Я решил исправить это недоразумение и начать развивать отдельную рубрику о работе старых видеочипов: начиная от S3 ViRGE и заканчивая GPU PS2 и PSP. Сегодня мы с вами: вспомним о S3 ViRGE, узнаем о том, как работали видеокарты в 90-х годах, затронем 2D и 3D режим и почему они тесно связаны между собой, посмотрим на проприетарное графическое API S3 ViRGE и раскроем причину, почему же этот GPU был таким медленным!
❯ 3D графика на ПК: начало
В начале 90-х годов 3D-графика на обычных домашних компьютерах была редкостью. Профессиональные GPU применялись только на дорогущих графических станциях, которые использовались в кинематографе или различных симуляциях, а также на дорогих японских игровых автоматах. У простого обывателя не было доступа к аппаратным средствам рендеринга 3D-графики.

Однако это не значит, что 3D-графики не было вообще. Прогресс развития домашних процессоров шёл семимильными шагами и гиганты рынка —Intel,AMDи в некоторой степени Cyrix, выпускали всё новые и новые процессоры с повышенными тактовыми частотами, а ближе к середине 90-х — и с SIMD (MMX). Поскольку многие техники для отрисовки трехмерного изображения были разработаны ещё в 60-х — 70-х годах, игроделы к началу-середине 90-х во всю использовали некоторые наработанные техники из кинематографа для растеризации 3D-графики прямо на процессоре — так называемыйсофтварный рендеринг.

Одной из самых известных техник 90-х являлась 2.5D графика с использованием рейкастинга — когда картинка на экране выглядит как трёхмерная, однако по факту весь мир представлен в виде 2D-координат, а эффект «пола и потолка» был как бы фейковым. Принцип его работы довольно прост: от глаз игрока для каждого горизонтального пикселя (т. е. при разрешении 240х320, у нас будет 240 проходов) пускаются «лучи» и ищется пересечение с ближайшей стеной относительно угла обзор из глаз игрока. Из этого пересечения берется дистанция до этой стены (на основе дистанции и угла считается «высота» данной строчки стены) и считается какую строчку текстуры необходимо вывести в этой точке. Одними из первых игр с применением этой технологии стал Hovertank и Wolfenstein 3D, а технология применялась практически до конца 90-х. Одной из самых лучших реализаций рейкастинга — движок Duke Nukem 3D, Build Engine, написанный Кеном Сильверманом.

Однако не одним 2.5D мы были едины. Шли годы, в СНГ многие люди продолжали наслаждаться 8-битными и 16-битными играми на клонахNESи SMD. У некоторых уже появлялась PS1, которая позволяла играть в игры с довольно хорошей 3D-графикой, однако на ПК 3D-игры были доступны не всем. Но в 1996 году выходитQuake— новейший шутер от первого лица от id Software с настоящей, трушной 3D-графикой и переворачивает всю индустриюFPSс ног на голову. Посудите сами: Джон Кармак умудрился реализовать достаточно быстрый софтварный рендерер, который мог вполне сносно работать на Pentium 75Мгц в разрешении 320×240. А ведь помимо отрисовки кадра, игре нужно было просчитывать логику монстров (довольно примитивную, к слову), обрабатывать столкновения, просчитывать видимую геометрию с помощью BSP-дерева и обрабатывать клиент-серверную логику самой игры. Это была самая настоящая революция в мире 3D игр на ПК.

В 1997 году, id Software выпустили glQuake — порт Quake с софтрендера на OpenGL, плюс своеобразную прослойку для совместимости с API 3dfx Glide (на видеокартах Voodoo) и подмножества OpenGL, используемым в игре. Порт на OpenGL позволял разгрузить ЦПУ, перенеся всю отрисовку графики с процессора на 3D-ускоритель. Сам по себе, OGL как графическое API, представлял из себя лишь набор спецификаций, который мог быть реализован как в программном виде, так и в аппаратном производителем видеокарты (на примере Windows — OpenGL32.dll это программная реализация, которая при необходимости обращается к atioglxx.dll/nvoglvxx.dll — аппаратной реализации OpenGL от вендора видеочипа). Однако, OpenGL корнями уходил именно в отрисовку промышленной графики, а DirectX всё ещё находился в зачаточной форме, из-за чего многие производители разрабатывали собственное графическое API: из известных мне, могу подчеркнуть ATI CIF (C Interface), 3dfx Glide и проприетарное SDK S3 ViRGE. Некоторые вендоры поддерживали целые игровые движки — например, BRender и RenderWare.

Отдельные 3D-акселлераторы потихоньку начали завоевывать сердца геймеров и создавать новый сегмент рынка. Серьезные видеокарты от известных производителей, такие как 3dfx Voodoo, ATI Rage и Riva TNT стоили достаточно дорого и многим были не по карману. Зато существовало множество видеокарт с 3D-ускорителями от других производителей, про некоторые из них вы могли даже не слышать: отдельные дискретные видеокарты Intel (i740), видеокарты от производителя чипсетов SiS и конечно же, видеокарты от S3 с сериями ViRGE и Savage. Видеочипы от Intel и SiS делали упор на D3D 7.

S3 ViRGE была весьма неплохой видеокартой с точки зрения 2D-ускорения. Сейчас 2D принято считать частным случаем 3D (по факту, 2D-спрайты — это 3D-квады, состоящие из двух треугольников), однако в то время для работы с памятью видеокарты и аппаратного ускорения некоторых операций, таких как блиттинг (BitBlt) существовало отдельное графическое API — DirectDraw. С этим у ViRGE было всё хорошо — он поддерживал довольно высокое разрешение экрана (при желании, объём видеопамяти можно было нарастить и установить разрешение ещё выше) и умел ускорять часть операций как DDraw, так и GDI.
Однако, ViRGE разочаровывал многих геймеров 90х своей производительностью в 3D-графике. На коробке с бюджетной видеокартой красовались красивые надписи о 3D-графике следующего поколения, а на фотографии можно было увидеть некую игру про мехов с невиданной графикой!

По факту, ViRGE подходил для 3D-игр не особо хорошо. Конечно в те годы никто особо не плевался от FPS и при желании, игру могли пройти и в 15, и в 20 FPS. Однако производительность софтварного рендерера иногда была даже выше, чем у растеризатора ViRGE, а игры должны были быть специально адаптированы под неё (т. е. портированы для использования S3DTK). Тайтлов с адаптацией по этот GPU было немало: как минимум, Tomb Raider и MechWarrior 2 (который шел в комплекте с игрой). Польские ребята из известной многим Techland даже написали прослойку S3D -> OpenGL, позволявшей запускать Quake на ViRGE. Производительность была не ахти…
Видеокарт от S3 нашлись и у меня, причём сразу несколько — ViRGE в PCI-исполнении и Trio в AGP-исполнении! Иногда я их использую для проверки старых материнских плат, которых у меня не так уж и много — рабочих на PGA370 и ниже у меня совсем нет. Однако остаётся вопрос, как эти видеокарты работали под капотом? Давайте узнаем!
❯ «Под капотом»
Исторически сложилось так, что 3D и 2D акселераторы могли быть отдельными и формально не зависящими друг от друга устройствами. Архитектура IBM PC в зависимости от «поколения», предполагала сразу несколько типов видеоадаптеров, которые были стандартизированы под определенный тип мониторов. Один из таких адаптеров, VGA, стал стандартом на долгие годы, в то время как два других использовались в совсем ранних машинах. Их ключевое отличие было в организации видеопамяти и цветности — CGA/EGA предполагал разбитие пространства экрана на т. н. битплейны (один байт содержал информацию о нескольких пикселях и если не ошибаюсь, для сохранения адресного пространства сегменты экрана необходимо было переключать аля банки памяти) и былпалитровым, в то время как VGA предполагал как палитровый режим, так и полноценный RGB и мог отразить весь фреймбуфер в линейную область адресного пространства. Кроме того, долгое время VGA использовался для обозначения разрешения дисплея: QVGA — половина VGA (320×240), VGA (640×480), широкоформатный WVGA (800×480) и т. п.

Другой особенностью была полная (насколько мне известно) обратная совместимостью друг с другом. Например, GeForce 7xx, как один из последних GPU, который поддерживал Legacy BIOS, теоретически вполне мог работать и с EGA режимами, и с CGA через соответствующие видеорежимы int 10h!
3D-режимы же никак не были стандартизированы и каждый производитель реализовывал работу с ними по разному — как уже говорилось ранее, кто-то реализовывал поддержку совсем молодого D3D и OpenGL (насколько мне известно, лучше всего с OpenGL было у NVidia. Остальные вендоры поддерживали OGL, но были свои болячки — у ATI они тянулись чуть ли не до середины-конца нулевых), а кто-то делал собственное графическое API и работал с видеочипом почти напрямую. Первые 3D GPU использовали шину PCI, которую почти сразу заменила более скоростная, но интерфейсно и софтварно почти идентичная шина AGP, а затем уже появился PCI-E, который оставался тем же PCI в софтовом плане, но был дифференциальным и последовательным, а не параллельным как интерфейсы-предшественники.

Дабы понять, как работают первые видеокарты, необходимо узнать о том, как происходит процесс отрисовки 3D-графики в общем случае. В мире программирования графики это называетсяконвейероми состоит он как минимум из нескольких этапов:
Установка состояний: Программа задаёт источники света на сцене, параметры Z-буфера и Stencil-буфера, какую текстуру(ы) следует наложить на рисуемую геометрию и с какой фильтрацией, какой тип аппаратного сглаживания использовать и т. п.
Ранее, каждый стейт необходимо было устанавливать отдельно, при необходимости — для каждого DrawCall’а. После подготовки состояния, программа вызывает соответствующую функцию отрисовки.
Обработка геометрии: Геометрия не поступает в растеризатор «как есть», в мировых координатах. Растеризатор оперирует вершинами в нормализованныхClip Spaceкоординатах — обычно, это [-1, -1… 1, 1], где 0.5 — центр экрана по каждой оси. Именно поэтому сначала необходимо провести этап трансформации геометрии для перевода из некой глобальной системы координат (которая может выражаться в метрах или, например, в пикселях) в Clip Space. Для этого чаще всего координаты (корректнее — трансформации) представляются в виде трех перемноженных матриц — model (мировые координаты геометрии), view (положение «глаз» в мире, или по простому камера. Умножая model на неё, мы получаем координаты объекта в пространстве камеры) и projection (матрица проекции, которая преобразовывает координаты из пространства глаз в тот самый Clip Space. Именно в этой матрице задается FOV для перспективной проекции и виртуальные размеры экрана для ортографической матрицы). После этого, координаты каждой вершины трансформируются полученной ModelViewProjection матрицей и получается финальная позиция для Clip Space. Звучит как сложный учебник матану, по факту всё очень просто. 🙂

Детали реализации низкоуровневого матана, в том числе перемножения матриц и построения матриц трансформаций и проекции знать желательно, но необязательно. Сейчас этим занимаются очень удобные математические библиотеки — например, glm, dxmath или d3dx.
Кроме того, ранее именно на вершинном этапе считалось освещение для уровня. В некоторых видеочипах была возможность аппаратного расчета источников света, в некоторых — только программная на ЦПУ.
На видеокартах тех лет, в том числе и S3 Virge, трансформацией вершин занимался центральный процессор, из-за чего было довольно серьёзное ограничение на количество вызовов отрисовки и число треугольников в одной модели. Видеокарты с аппаратной, но всё ещё не программируемой трансформацией вершин появились лишь к GeForce 2 — называлась эта технология T&L (Transform and Lightning) и её преимущество было в том, что у видеокарты были специализированные векторные сопроцессоры, способны быстро пересчитывать векторные операции (а у ЦПУ, в свою очередь, развивались SIMD наборы инструкций, позволяющие выполнять несколько операций над float одновременно). В некоторых случаях, был даже отдельный программируемый векторный сопроцессор как, например, в PlayStation 2, что позволяло реализовать вершинные шейдеры ещё в 2000 году! На современных видеокартах, этапом трансформации в самом простом случае управляют вершинные шейдеры. Помимо этого, есть возможность создания геометрии «на лету» с использованием тесселяции и геометрических шейдеров, а совсем недавно появились Mesh-шейдеры, которые объединили несколько подэтапов конвейера в один.

Растеризация: Сам процесс отрисовки геометрии на дисплей с данными, полученными с прошлого этапа. Именно на этом этапе треугольники (или иные геометрические примитивы) закрашиваются определенным цветом или на них накладывается текстура. В процессе растеризации есть такое понятие, как интерполятор — специальный модуль, который интерполирует несколько значений в барицентрических координатах растеризуемого треугольника, дабы текстурный юнит мог наложить определенный участок текстуры на фрагмент треугольника.
В современных видеокартах этот этап конвейера программируется пиксельными (или фрагментными) шейдерами. В старых видеочипах (исключение — вроде-бы частично программируемый GPU Nintendo 64, поправьте в комментариях, если не прав) этот процесс строго определен в каждом GPU и не программировался. Именно поэтому такой подход к рисованию графики назывался Fixed function pipeline. Были ещё комбайнеры, но они появились заметно позже — когда в видеокартах появилось уже несколько текстурных юнитов, способных смешивать несколько текстур одновременно.

Делая вывод, мы можем понять, что S3 Virge и другие видеочипы были устройствами, которые умели рисовать лишь тот уровень графики, который был заложен производителем с завода. Такой подход называется фиксированным конвейером — Fixed Function Pipeline. Сейчас разработчики видеочипов перешли с фиксированного конвейера на программируемый (шейдерный). Уже начиная с SM2.0-SM3.0, на современных видеокартах появилась возможность создавать крутое и достаточно сложное освещение и различные эффекты, которые стали неотъемлемыми в современных играх.
Кроме того, важно понимать, что в видеопамяти ранних видеочипов хранился только фреймбуфер, а немного позже — текстуры, именно поэтому VRAM в старой документации называют «текстурной памятью». Вообще, некоторые нюансы первых версий OpenGL тянуться именно из особенностей работы первых видеокарт. Вспомнить хотя бы первые функции для старта отрисовки геометрии и загрузке вершин на видеокарту — это были связки glBegin/glVertex/glEnd:
glBegin(GL_TRIANGLES);
glVertex3f(0, 0, 0);
glVertex3f(1, 0, 0);
glVertex3f(1, 1, 0);
glEnd(); // Для одного треугольника
glBegin(GL_TRIANGLES);
for(int i = 0; i
glEnd(); // Для меша
Даже сам glBegin/glVertex/glEnd появились не спроста. Геометрию на видеокарте начали хранить только в начале нулевых (и то не везде — привет встройкам Intel и S3).
Но перейдем к особенностям работы S3 ViRGE. Даташит лежит в свободном доступе, благодаря чему мы можем более подробно ознакомиться с характеристиками этого видеочипа и о том, как он работал под капотом.

В основе у нас лежит 64-х битное ядро, которое могло обрабатывать как 2D-графику с аппаратным ускорением, так и 3D-графику. Ядро работало на частоте 135МГц с встроенным RAMDAC (модуль, отвечающий за вывод картинки на аналоговые разъемы — VGA и DVI, однако выводом на TV-тюльпаны занимался отдельный чип TV-энкодер). Современные видеочипы перешагнули планку 1ГГц, однако сравнение исключительно по частоте некорректны — архитектуры очень сильно отличаются. Помимо этого, видеочип умел декодировать видео с интерполяцией и аппаратно «помогать» процессору с скейлингом видео (например, когда вы разворачиваете плеер на весь экран) и даже рендерить видео в текстуру (что позволяло реализовать, например, телевизоры в играх)!
3D движок поддерживал следующие возможности:
- Затенение по Гур.о
- Маппинг текстур с перспективной коррекцией и билинейной/трилинейной фильтрацией, а также мипмаппингом.
- Depth-буфер, сэмплинг тумана и поддержка альфа-блендинга (прозрачной геометрии).
Чип поддерживал две шины — PCI и менее известную VLB (Vesa Local Bus, очень условно ISA)
Помимо этого, у чипа не было встроенной памяти — к нему необходимо было подключать внешнюю DRAM-память 2/4/8Мб. От её количества зависело максимально-поддерживаемое разрешение экрана. Текстуры при необходимости хранились в ОЗУ.

Видеопамять когда-то расширялась за счёт дополнительных модулей! Эту видеокарту можно расширить аж до 8МБ!
Поддерживаемые разрешения экрана:

Для DirectDraw и ускорения 2D-графики в Windows была реализация аппаратного BitBLT — копирования пикселей в точку на экране. Она поддерживала все режимы, которые были в реализации этой функции в Windows — от монохромных, до 24-х битных. Без альфа-блендинга, само собой. Но тут нет ничего необычного — многие видеочипы тех лет предоставляли простое 2D-ускорение.
Интереснее реализация отрисовки 3D-графики. Каждый треугольник описывался 3-мя регистрами на каждый параметр — координата X, Y для каждой точки, текстурные координаты и т. п. Всего для отрисовки одного треугольника могло потребоваться до 43 регистров! Весьма немало. И именно из-за этого в свое время появились glBegin/glVertex/glEnd!

Параметры сэмплера (текстурного юнита) задавались регистрами, которые определяли формат пикселя текстуры и сам тип фильтрации. Как я уже говорил выше — поддерживалась билинейная и трилинейная фильтрация и проприетарный формат сжатия текстур, который стал стандартом: S3TC или DXT.

Для программирования S3 ViRGE было разработано собственное C SDK — S3DTK, которое состояло из сэмплов и заголовочных файлов для общения с GAPI видеочипа (или видеочипом напрямую, если игра предназначена для DOS). При этом вполне не исключено, что GAPI для Windows работало с видеокартой напрямую, предоставляя PCI-драйвер лишь как прослойку для обмена данными. Поскольку это не D3D, для игр с поддержкой видеоускорения требовалось качать специфические версии. Некоторые игры (как Quake 2) поддерживали мультирендер, но не поддерживали S3 ViRGE.
Весь графический API помещался в один заголовочный файл. API было не простым, а очень простым и понятным — думаю, даже разработчикам-новичкам было легко начать программировать под ViRGE!

Формат вершин был фиксированным и зависел от того, как вы рисовали геометрию на экране:

GAPI поддерживало различные типы треугольных списков, а также точки (POINT для спрайтов и систем частиц) и линии:
#define S3DTK_TRILIST 0
#define S3DTK_TRISTRIP 1
#define S3DTK_TRIFAN 2
#define S3DTK_LINE 3
#define S3DTK_POINT 4
Фактическое API для рисования умещалось в 9 функций и ещё несколько функций для инициализации библиотеки, преобразования адресного пространства и работы с Windows.
Для работы с состоянием видеочипа служили две функции — SetState и GetState. Именно они отвечали за то, как рисовалась геометрия на экране:

А для фактического рисования примитивов служили функции TriangleSet и TriangleSetEx! Да, это альтернатива DrawPrimitives/DrawArrays в современных GAPI. Никаких индексов тогда ещё не использовалось! Функции принимали указатель на массив вершин и их количество, а также на тип рисуемой геометрии (треугольники, линии и т. п.). В Ex версии, можно было «пачкой» установить стейты параллельно с рисованием — такой подход используется в DX10+ API — стейты тоже задаются исключительно «пачками», только теперь они поделены на подгруппы.

Для 2D-рисования были свои, отдельные функции — для блиттинга. Поддерживался ColorKey/хромакей — прозрачным считался определенный цвет, переданный как параметр функции

Основной причиной медлительности S3 ViRGE был низкий филлрейт. При отрисовке примитивов, которые занимают большое пространство экрана, FPS резко просаживался даже с примитивными кубиками и пирамидками. Однако, если не насаживаться на филлрейт и делать что-то типа 2D-поля и 3D-танчиков, то производительность оставалась вполне приемлимой.
❯ Заключение
История S3 закончилась поглощением компанией VIA. После этого, компания разрабатывала интегрированную графику специально для чипсетов VIA, а материнские платы на этих чипах пользовались довольно высоким спросом. Поэтому нередко взяв старый бюджетный ноутбук, года эдак 2005, можно найти в нём VIA Chrome — наследника легендарного S3 Savage! Проблемы у такого подхода тоже были — из-за наследия из конца 90х, ранние Chrome по сути поддерживали только D3D 7.0 и OpenGL ~1.4. Несколько позже, в 2009 году, компания выпустила S3 Chrome 540 GTX — одну из последних видеокарт на собственной архитектуре. Этот видеочип был достаточно современным и поддерживал DX10.1, OpenGL 3.0. Интересно, реально ли найти эту видеокарту сейчас?

По итогу мы можем сделать вывод, что первые 3D-ускорители были относительно простыми устройствами «под капотом» и их можно было программировать чуть ли не «напрямую». Многие старые видеочипы получили свои локальные прозвища и стали легендарными, однако их архитектура и принцип работы оставались тайной. По крайней мере, в рунете точно.

Насколько я понимаю, неравнодушные инженеры после закрытия 3dfx и слияния S3 с VIA решили «слить» даташиты в сеть, за что им большое спасибо! Ведь теперь мы имеем возможность посмотреть на принцип работы таких устройств сами!
Материал подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня, мой Telegram и @Timeweb.Cloud, чтобы не пропускать новый материал каждую неделю!
